fas*_*sth 9 javascript observable rxjs typescript angular
我有一个主题的服务:
@Injectable() export class UserService() {
private currentUserSubject = new BehaviorSubject<User>(null);
public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged();
... // emitting new User
}
Run Code Online (Sandbox Code Playgroud)
有一个组件我将此服务注入并订阅更新:
@Component() export class UserComponent {
constructor(private userService: UserService) {
this.userService.currentUser
.subscribe((user) => {
// I want to see not null value here
})
}
}
Run Code Online (Sandbox Code Playgroud)
我想应用一些东西来Observable<User>
过滤所有空值,只有在User
实际加载时才进入订阅.
sno*_*ete 19
在您的可观察链中添加过滤器运算符.您可以明确过滤空值,或只检查您的用户是否真实 - 您必须根据需要进行调用.
仅过滤掉空用户:
public currentUser = this.currentUserSubject
.asObservable()
.filter(user => user !== null)
.distinctUntilChanged();
Run Code Online (Sandbox Code Playgroud)
Ami*_*noy 17
使用rxjs@6
和打字稿推荐的(可读/可维护)方式是定义以下类型保护:
export function isNonNull<T>(value: T): value is NonNullable<T> {
return value != null;
}
Run Code Online (Sandbox Code Playgroud)
并用pipe
和扩充主题filter
:
subject.pipe(filter(isNonNull))
Run Code Online (Sandbox Code Playgroud)
ack*_*ser 14
Anoter检查值的方法存在
public currentUser = this.currentUserSubject
.asObservable()
.filter(Boolean)
.distinctUntilChanged();
Run Code Online (Sandbox Code Playgroud)
filter(user => !!user),
Run Code Online (Sandbox Code Playgroud)
如果用户评估为 false,则不会通过过滤器。
所以会过滤这些假值(链接到 MDN 上的 Falsy)。
归档时间: |
|
查看次数: |
11586 次 |
最近记录: |