实施 NbRoleProvider
Implementing NbRoleProvider
我在我的 Angular
应用程序中使用 Nebular
实现 NbRoleProvider
。
我是这样实现的:
@Injectable()
export class RoleProvider implements NbRoleProvider {
constructor(private store: Store<IAppStore>) {
}
getRole(): Observable<string[]> {
const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);
let result = [];
loggedUser.subscribe(data => {
if (data != null) {
result = data.roles; // returns ['admin']
}
});
return of(result);
// this works!!
// return of(['admin']);
}
}
如果我 return 像 ['admin']
这样的固定数组角色,一切都按预期工作。如果我尝试订阅商店的价值,它将无法正常工作。调试 我看到当 data
对象仍然是 null
时 getRole
方法被调用了几次,然后当它加载了适当的数组列表时又被调用了几次。
似乎 *nbIsGranted
指令在订阅仍在等待存储中的数据的第一时刻呈现。
我想念什么?
我会尝试直接从商店返回 Observable,例如:
import { map } from 'rxjs/operators';
@Injectable()
export class RoleProvider implements NbRoleProvider {
constructor(private store: Store<IAppStore>) {}
getRole(): Observable<string[]> {
const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);
return loggedUser.pipe(map(data => data ? data.roles : []));
}
}
我在我的 Angular
应用程序中使用 Nebular
实现 NbRoleProvider
。
我是这样实现的:
@Injectable()
export class RoleProvider implements NbRoleProvider {
constructor(private store: Store<IAppStore>) {
}
getRole(): Observable<string[]> {
const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);
let result = [];
loggedUser.subscribe(data => {
if (data != null) {
result = data.roles; // returns ['admin']
}
});
return of(result);
// this works!!
// return of(['admin']);
}
}
如果我 return 像 ['admin']
这样的固定数组角色,一切都按预期工作。如果我尝试订阅商店的价值,它将无法正常工作。调试 我看到当 data
对象仍然是 null
时 getRole
方法被调用了几次,然后当它加载了适当的数组列表时又被调用了几次。
似乎 *nbIsGranted
指令在订阅仍在等待存储中的数据的第一时刻呈现。
我想念什么?
我会尝试直接从商店返回 Observable,例如:
import { map } from 'rxjs/operators';
@Injectable()
export class RoleProvider implements NbRoleProvider {
constructor(private store: Store<IAppStore>) {}
getRole(): Observable<string[]> {
const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);
return loggedUser.pipe(map(data => data ? data.roles : []));
}
}