0

我正在NbRoleProvider我的Angular应用程序中使用Nebular.

我已经实现它如下:

@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']);
    }
}

如果我['admin']像预期的那样返回一个固定的数组角色。如果我尝试从商店订阅值,它将不起作用。调试我看到该方法在对象静止getRole时被调用了几次,然后在它被加载了正确的数组列表时被调用了几次。datanull

*nbIsGranted当订阅仍然等待来自商店的数据时,该指令似乎在第一时间呈现。

我想念什么?

4

1 回答 1

2

我会尝试直接从商店返回 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 : []));
    }
}
于 2019-03-10T17:29:36.393 回答