Angular 如何检查可观察值是否以角度填充?
我希望通过一个HTTP请求在应用程序中集中加载一些数据,并希望将这些数据传递给多个单独的组件。我正在使用Behavior Subject类设置加载到共享服务中的可观察对象中的数据,并在单个组件中订阅它 共享服务:Angular 如何检查可观察值是否以角度填充?,angular,rxjs,observable,Angular,Rxjs,Observable,我希望通过一个HTTP请求在应用程序中集中加载一些数据,并希望将这些数据传递给多个单独的组件。我正在使用Behavior Subject类设置加载到共享服务中的可观察对象中的数据,并在单个组件中订阅它 共享服务: data: Observable<any>; load_data(){ this.http.post('/myAPIMethod', {myInputs}).subscribe( res => { var data
data: Observable<any>;
load_data(){
this.http.post('/myAPIMethod', {myInputs}).subscribe(
res => {
var dataSource=new BehaviorSubject(res);
this.data = dataSource.asObservable();
}, error => {
console.log(error);
});
}
myComponent.component.ts
constructor(private shared: SharedService) { }
ngAfterViewInit(){
this.shared.data.subscribe(
res => {console.log(res)},
err => {console.log(err)}
);
}
由于我的app.component.ts和myComponent.component.ts文件是异步独立加载的,因此,即使在应用程序加载数据之前,当它尝试订阅myComponent中可观察到的“数据”时,我也会收到一个错误。我收到一个未定义错误的订阅(“数据”未定义,它已经在尝试订阅)
在myComponent文件中订阅“数据”可观察值之前,如何检查已设置的“数据”可观察值?请改用:
这样,组件可以在返回数据之前订阅主题
,并在收到http调用时发出数据
此外,如果您不打算在subscribe函数中操作DOM/View元素,则在ngOnInit
内部调用它:
yourComponet.ts
ngOnInit(){
this.shared.data.subscribe(
res => {console.log(res)},
err => {console.log(err)}
);
成功了。因此,基于此,主体在初始化时发出,甚至在没有赋值(新主体行)时也会发出,而可观察的主体在访问之前实际上需要设置一些值?我的理解正确吗?两者都可以在返回数据之前订阅,不同的主题将多播数据,而可观察的主题将单播itI使用的主题,因为我认为您打算多播数据,但如果不是,您可以在
加载数据()
中返回此.http.post('/myAPIMethod',{myInputs}),然后在组件中订阅它好吧,那么我得到的错误一定是因为observable已经在其他组件中被调用了,所以进行相同调用的第二个组件不能再加载数据了,对吗?现在使用Subject,因为它是多播的,所以它能够并行地在多个组件中加载它,对吗?是的,我的意图是调用多个组件。
data = new Subject();
load_data(){
this.http.post('/myAPIMethod', {myInputs}).subscribe(
res => {
this.data.next(res);
}, error => {
console.log(error);
});
}
ngOnInit(){
this.shared.data.subscribe(
res => {console.log(res)},
err => {console.log(err)}
);