私は主題を持つサービスを持っています:
@Injectable() export class UserService() {
private currentUserSubject = new BehaviorSubject<User>(null);
public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged();
... // emitting new User
}
このサービスを注入し、更新をサブスクライブするコンポーネントを用意します。
@Component() export class UserComponent {
constructor(private userService: UserService) {
this.userService.currentUser
.subscribe((user) => {
// I want to see not null value here
})
}
}
Observable<User>
に何かを適用してすべてのnull値をフィルタリングし、User
が実際にロードされたときにのみサブスクライブしたい.
監視可能なチェーンにフィルター演算子を追加します。 nullを明示的にフィルタリングすることも、ユーザーが真実であることを確認することもできます。必要に応じてその呼び出しを行う必要があります。
nullユーザーのみを除外:
public currentUser = this.currentUserSubject
.asObservable()
.filter(user => user !== null)
.distinctUntilChanged();
値を確認する別の方法が存在します
public currentUser = this.currentUserSubject
.asObservable()
.filter(Boolean)
.distinctUntilChanged();
rxjs@6
およびTypeScriptが推奨される(読み取り可能/保守可能な)方法は、次のタイプガードを定義することです。
export function isNonNull<T>(value: T): value is NonNullable<T> {
return value != null;
}
件名をpipe
およびfilter
で拡張します。
subject.pipe(filter(isNonNull))