2016-12-15 32 views
6

मैं द्वारा मेरे टेम्पलेट में एक नमूदार उपयोग करने के लिए कोशिश कर रहा हूँ में नमूदार:उपयोग खाका

<md-nav-list> 
    <a md-list-item *ngIf="!isAuth() | async" [routerLink]="['login']" (click)="sidenav.toggle()">Login</a> 
    <a md-list-item *ngIf="isAuth() | async" (click)="logout()" (click)="sidenav.toggle()">Logout</a> 
</md-nav-list> 

और मेरे मॉड्यूल में:

isAuth(): Observable<boolean> { 
     return this.loginservice.getAuthenticated() 
        .map(user => { if(user){ 
            if(user.hasOwnProperty('uid')){ 
             return true; 
            } else { 
             return false; 
            } 
            } else { 
            return false; 
            } 
           }) 
     } 

तो मेरी समस्या:

अगर मैं loggedin हूँ और अवलोकन योग्य रिटर्न सत्य -> ​​मेरा मेनू आइटम ठंडा

परन्तु यदि अवलोकन योग्य झूठ लौटाता है -> मेरा मेनू emp है ty -> क्या गलत है?

उत्तर

10

आपका अभिव्यक्ति *ngIf="!isAuth() | async" जा रहा है के रूप में व्याख्या की जा करने के लिए:

isAuth() -> returns observable 
!isAuth() -> returns false because of ! 
!isAuth() | async -> actually trying to subscribe on false which should fail 

बस !(isAuth() | async) बजाय का उपयोग करें।

आपके पास एक और समस्या यह है कि आप टेम्पलेट लोड करते समय सर्वर को दो बार कॉल करते हैं। यह ऐसा कुछ है जिसे आप शायद नहीं करना चाहते हैं।

और अंत में, इस

this.loginservice.getAuthenticated() 
       .map(user => { if(user){ 
           if(user.hasOwnProperty('uid')){ 
            return true; 
           } else { 
            return false; 
           } 
           } else { 
           return false; 
           } 
          }) 

this.loginservice.getAuthenticated() 
    .map(user => user && user.hasOwnProperty('uid')) 

के रूप में और कोणीय के साथ 5 + के रूप में

this.loginservice.getAuthenticated().pipe(
    map(user => user && user.hasOwnProperty('uid')) 
) 
+1

अच्छी तरह से समझाया +1 लिखा जा सकता है, लेकिन वह कैसे ठीक विपरीत संभाल कर सकते हैं मामला? –

+2

पहली समस्या के बारे में, आपको समझाया जाना चाहिए कि इसे कैसेष्ठक के साथ तय किया जा सकता है। – StriplingWarrior

+1

@StriplingWarrior अच्छी तरह से यह आसान है यदि आप इसका मतलब है!! (IsAuth() | async) ', हालांकि मुझे नहीं लगता कि एक ही अवलोकन योग्य पर दो बार सदस्यता लेना एक अच्छा विचार है। मैं इसके बजाय घटक स्तर पर इसकी सदस्यता लेता हूं ... – smnbbrv

संबंधित मुद्दे