Angular 可观察作为指令的输入
我有一个指令,我想通过这个指令添加@Input observable来处理http observable的成功和失败场景Angular 可观察作为指令的输入,angular,rxjs,angular-directive,Angular,Rxjs,Angular Directive,我有一个指令,我想通过这个指令添加@Input observable来处理http observable的成功和失败场景 Directive({ selector: '[search]' }) export class SearchDirective implements OnInit, OnChanges, OnDestroy { @Input() searchObs = new Subject(); ngOnInit() { this.sub =
Directive({
selector: '[search]'
})
export class SearchDirective implements OnInit, OnChanges, OnDestroy {
@Input() searchObs = new Subject();
ngOnInit() {
this.sub = this.searchObs.subscribe(
data => console.log(data),
err => console.log(err._body),
() => console.log('directive completed')
);
}
ngOnDestroy() {
this.sub.unsubscribe();
}
ngOnChanges(changes: SimpleChanges): void {
// tslint:disable-next-line:forin
for (let propName in changes) {
let change = changes[propName];
if (propName === 'searchObs') {
this.searchObs = (change.currentValue as Subject<any>);
this.sub = this.searchObs.subscribe(
data => console.log(data),
err => console.log(err._body),
() => console.log('directive change completed')
);
}
}
}
}
现在我得到了subscription的第一个值,不管它是指令中的成功还是错误,然后没有数据绑定到指令,会发生什么 主要的问题是主题错误处理关闭Subject.error上的主题,因此我在错误后再次刷新它
组件技术
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
this.searchObs = new Subject();
});
}
在您的指令中,@Input searchObs=新主题;这部分将替换组件的输入,只需将@input定义为subject@JimmyHo我尝试了它,得到了以下错误类型错误:无法读取未定义的属性'subscribe',当我将其作为新主题时,我只运行了一次以前的行为,我注意到如果成功,我可以在指令中获取新数据。它仅在错误处理场景中失败。当使用新的Subject@JimmyHo我发现当主题出现错误时,它关闭了,无法恢复或调用subject.next或subject.error。因此,在我的api可观察服务中,我重新定义了主题,所有值现在都绑定到我的指令
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
this.searchObs = new Subject();
});
}