Mat*_*s.h 3 observable rxjs angular
嗨,我是新手。
我不知道为什么无法在Observable中设置新值
我的代码:
resultJob: Observable<any> = Observable.of("PENDING");
ngOnInit() {
this.resultJob.subscribe(result => {
result.next("SUCCESS")
result.complete()
})
}
Run Code Online (Sandbox Code Playgroud)
此代码返回 result.next is not a function
在Observable上没有next();仅在Subject和BehaviorSubject上,后者扩展了Subject(并且都扩展了Observable)。
您需要做的是:
resultJob: Subject<string> = new BehaviorSubject<string>("PENDING");
Run Code Online (Sandbox Code Playgroud)
与Subject相比,BehaviorSubject会使用在流中推送的第一个值进行初始化。这似乎是您想要做的。
结果也是字符串类型,而不是可观察类型。您要在resultJob而不是result(流中的元素)上调用next()。但是我不明白为什么您要在订阅中这样做。您将以这种方式收到循环调用:您在流中推送了一个新元素,并通过推送另一个元素来响应其检测,依此类推...
这是观察者的示例示例。有关组件交互的更多信息,您可以参考此文档组件交互
第 1 步:- app.module.ts
import { UserService } from './user.service';
@NgModule({
providers: [
UserService
]
})
Run Code Online (Sandbox Code Playgroud)
第 2 步:- user.service.ts
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class UserService {
users: any = null;
nativeWindow: any;
private userAddedSource = new Subject<any>();
userAdded$ = this.userAddedSource.asObservable();
addNewUser(user) {
this.userAddedSource.next({ user: user });
}
}
Run Code Online (Sandbox Code Playgroud)
第 3 步:-在您的组件中添加此代码以发送数据
this.userService.addNewUser({name:'xyz'}); // your data
Run Code Online (Sandbox Code Playgroud)
第 4 步:-在您的接收器组件上
ngOnInit() {
this.userService.userAdded$.subscribe(data => {
console.log(data.user);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7558 次 |
| 最近记录: |