Angular2とObservableを初めて使用するので、getRoles
タイプのObservableにObservable<string[]>
文字列が含まれているかどうかを確認したいと思います。
public hasRole(name: string): boolean {
// getRoles is of type Observable<string[]>
let getRoles = this.tokenService.getTokenInformation().map(element => element.roles);
if (/* check if name is inside of getRoles */) {
return true;
}
return false;
}
オブザーバブルは非同期であるため、を使用することはできませんlet getRoles = ...map(...)
。このmap()
メソッドは、配列ではなく、常に非同期のObservableで実行されます。
したがって、それを行う適切な方法は次のようになります(私はこのコードをテストしませんでした):
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1);
}
first()
ソースが完了したときに一致する要素が見つからなかった場合(すべてのロールを繰り返した場合)、オペレーターはエラーを発行します。
次に、次のようなこの方法を使用します。
hasRole('my-role').subscribe(
role => console.log("has role"),
error => console.log("doesn't have role"),
)
編集:
これにより、すべてがtrue
orfalse
値のみに変換されます。first()
これらの引数は何ですか?演算子についてはドキュメントを参照してください。それから私はmap()
すべてをブール値に強制的に変換していました。
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1, undefined, false)
.map(val => !!val);
}
ライブの簡略化されたデモを参照してください:http://plnkr.co/edit/MtYfGLgqgHACPswFTVJ5
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加