2017-03-25 15 views
6

मैं अपने एनवी-बार पर चुनिंदा रूप से लिंक प्रदर्शित करने में असमर्थ हूं। कौन से लॉग इन (उपयोगकर्ता या व्यवस्थापक) के आधार पर, मैं अपने एनवी-बार पर कौन सा लिंक दिखाता हूं बदलना चाहता हूं।कोणीय 2- एकाधिक स्थितियों के साथ * ngIf का उपयोग

नीचे ऐसे एक उदाहरण के लिए कोड है जहां उपयोगकर्ता/व्यवस्थापक लॉग आउट करता है।

navbar.component.html में -

-

<li *ngIf="authService.userLoggedIn()== true && authService.adminLoggedIn() == false" 
     [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}"> 
    <a (click)="onUserLogoutClick()" href="#">Logout</a> 
</li> 

<li *ngIf="(authService.adminLoggedIn() == true) && (authService.userLoggedIn() == false)" 
     [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}"> 
    <a (click)="onAdminLogoutClick()" href="#">Logout</a> 
</li> 

दोनों authService.adminLoggedIn() और authService.userLoggedIn() वापसी tokenNotExpired;

नीचे navbar.component.ts में प्रासंगिक कोड है

onUserLogoutClick() { this.authService.userLogout(); this.flashMessage.show('You are now logged out', {cssClass: 'alert-success', timeout: 3000}); this.router.navigate(['/login']); return false; } onAdminLogoutClick() { this.authService.adminLogout(); this.flashMessage.show('Administrator now logged out', {cssClass: 'alert-success', timeout: 3000}); this.router.navigate(['/admin']); return false; } 

authService.adminLogout() और authService.userLogout() बस स्थानीय संग्रहण में संग्रहीत टोकन को साफ़ करता है।

अगर मैंने जो गलती की है, वह मैं मूर्खता से माफी माँगता हूं। मैं कोणीय के लिए नया हूँ।

+1

अपनी पोस्ट को संशोधित अधिक अर्थ ful – Aravind

+0

आप अगर व्यवस्थापक में लॉग इन करें या उपयोगकर्ता लॉग इन कैसे पहचान कर रहे हैं होने के लिए – Aravind

+0

में क्या आप कृपया बता सकते हैं कि authService.adminLoggedIn() और authService.userLoggedIn() वापसी टोकन नहीं है लेकिन आपने बूलियन सत्य पर परीक्षण कर रहे हैं? क्या मैं यह भी पूछ सकता हूं कि क्या आप टेम्पलेट के बजाय जेएस कोड के हिस्से के रूप में तर्क बनाना पसंद कर सकते हैं? ऐसा लगता है कि यह एक टेम्पलेट प्रभाव नहीं है। –

उत्तर

13

आप

showLogout(){ 
    if(this.authService.userLoggedIn()== true && this.authService.adminLoggedIn() == false) 
     return true; 
    else 
     return false; 
} 

इसके अलावा नीचे के रूप में अपने घटक विधि करने के लिए इन बहु की स्थिति और जटिल परिस्थितियों स्थानांतरित कर सकते हैं angular4 के रूप में, है *ngIf and else आप के रूप में

<div *ngIf="showLogout();then userLogout else adminlogout"></div> 

<ng-template #userLogout><a (click)="onUserLogoutClick()" href="#">Logout</a></li></ng-template> 
<ng-template #adminlogout><a (click)="onAdminLogoutClick()" href="#">Logout</a></li></ng-template> 
+0

'showLogout' * method * को सरल क्यों नहीं करें? 'इसे वापस करें। authService.userLoggedIn() &&! this.authService.adminLoggedIn() '। – developer033

+0

ठीक है। यूप भी ऐसा ही किया जा सकता है। – Aravind

+0

@ अरविंद, आपका समाधान काम करता है, लेकिन जब कोई भी लॉग इन नहीं होता है, तो एनएवी-बार अभी भी (onAdminLogoutClick) के लिए लॉगआउट लिंक दिखा रहा है। व्यवस्थापक के लिए जेनरेट करने वाले टोकन में 'admin_token' की आईडी है, और उपयोगकर्ता के लिए टोकन में 'user_token' की आईडी है। इसलिए जब मैं authService.adminLoggedIn() को कॉल करता हूं, तो यह टोकन नॉट एक्स्पेरड ('admin_token') देता है और authService.userLoggedIn() के लिए यह टोकन नोट नहीं करता है ('user_token')। इस प्रकार मैं यह निर्धारित करता हूं कि उपयोगकर्ता या व्यवस्थापक लॉग इन हैं। –

0

authService.userLoggedIn उपयोग कर सकते हैं() या authService.adminLoggedIn() आपकी अभिव्यक्ति में आपके टेम्पलेट को सूचित नहीं करेगा कि आपके फ़ंक्शन को केवल एक बार बुलाया गया है।

प्रयास करें उन्हें अपनी सेवा में मनुष्य:

get userLoggedIn(): boolean { 
    return this.who.user; // your logic 
    } 
अपने खाके में

तब:

<li *ngIf="authService.userLoggedIn && !authService.adminLoggedIn"... 
संबंधित मुद्दे