【发布时间】:2017-09-27 18:15:06
【问题描述】:
我创建了一个结构指令来检查用户是否具有某些权限。权限是从后端获取并保存在服务本身中。结构指令根据 DI 注入服务,并应检查服务中是否存在权限。
想法:服务应该从后端获取所有权限 -> 通过指令检查权限 -> 如果为真则渲染
问题是服务没有获取服务。服务等待结构指令的所有查询,然后开始获取服务。
看起来像这样:
authority.directive.ts
@Directive({
selector: '[authority]'
})
export class AuthorityDirective {
constructor(private userService: UserService,
private templateRef: TemplateRef < any > ,
private viewContainer: ViewContainerRef) {}
@Input() set bdAuthority(authName: string) {
if (this.userService.hasAuthority(authName)) {
this.viewContainer.createEmbeddedView(this.templateRef);
return;
}
this.viewContainer.clear();
return;
}
}
和 authority.service.ts 像这样
// check if the current user has the defined privilege
public hasAuthority(authorityName: string): boolean {
return (
this.authorityCache
.filter((authority) => {
return authorityName === authority.name
})
.length) > 0;
}
public onBrowserReload(tempUser: User) {
this.getUserById(tempUser.id).subscribe(user => {
this.updatePrivilegesAndUser(user);
});
}
}
}
有没有办法让服务早点启动?
【问题讨论】:
-
仅供参考的结构指令旨在改变 DOM,如 *ngIf 和 *ngFor
-
渲染顺序有区别吗?