[英]angular2 show hide contents of header based on user roles
angular2 的新手,我的 app.component.html 看起来像这样-
<nav *ngIf="rolesArr.length>0" >
<ul>
<li>
<a routerLink="home" class="sectionLink">Home</a>
</li>
<li>
<a routerLink="manage" class="sectionLink">manage</a>
</li>
<li>
<a routerLink="setting" class="sectionLink">setting</a>
</li>
</nav>
<router-outlet></router-outlet>
<footer> ... </footer>
这是 app.component.ts-
export class AppComponent {
rolesArr: string[];
constructor(private ps: PostsService, private roleS: Roles) {
this.rolesArr = roleS.getUserRoles();
}
}
所以我使用角度路由在链接之间导航。 包括登录。 所以这个导航页眉和页脚最初使用登录窗口加载。 并且由于用户未登录,字符串数组rolesArr 的值为空。 这意味着没有标签。 没关系。
但是当用户成功登录并移动到另一个组件时,内容会发生变化。 和字符串数组rolesArr 也得到了一些东西。
但我需要根据登录的用户角色更改标题上的选项卡视图。 就像数组包含管理员角色一样,都会显示。 在用户角色上,只会显示第一个选项卡。
可以通过@Output
和共享服务来实现。
创建一个服务以发出标头更改事件:
import { Injectable , Output, EventEmitter } from '@angular/core';
@Injectable()
export class EventEmitterService {
@Output() refreshTopHeaderMenuEventEmitter: EventEmitter<any> = new EventEmitter();
public emitTopHeaderMenuUpdatedEvent(parameters) {
this.refreshTopHeaderMenuEventEmitter.emit(parameters);
}
public getRefreshTopHeaderMenuEventEmitter() {
return this.refreshTopHeaderMenuEventEmitter;
}
}
在应用程序组件中:
import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { EventEmitterService } from './event-emitter.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
constructor(public _eventEmitterService: EventEmitterService) { }
ngOnInit() {
this._eventEmitterService.getRefreshTopHeaderMenuEventEmitter().subscribe(callBack => {
console.log('refresh header');
});
}
}
从内部组件更改标题:
import { Component, OnInit } from '@angular/core';
import { EventEmitterService } from './event-emitter.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html'
})
export class HomeComponent implements OnInit {
constructor(public _eventEmitterService: EventEmitterService) { }
ngOnInit() { }
changeHeader(){
this._eventEmitterService.emitTopHeaderMenuUpdatedEvent(false);
}
}
解释 :
您需要创建一个服务EventEmitterService
,其中包含一个EventEmitter
refreshTopHeaderMenuEventEmitter
对象,该对象可从子组件访问。
在AppComponent
, getRefreshTopHeaderMenuEventEmitter()
将返回EventEmitter
对象。
emitTopHeaderMenuUpdatedEvent()
从子级设置此事件对象,如上所示,标题将被刷新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.