可观察作为指令的输入
Observable as input for Directive
我有一个指令,我想添加 @Input observable 以通过该指令处理 http observable 的成功和失败场景
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')
);
}
}
}
}
我的组件 api 可观察到
searchObs = new Subject();
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
});
}
现在我得到了订阅的第一个值,无论它是指令中的成功还是错误,然后没有数据绑定到指令。
主要问题是 Subject
错误处理关闭了 Subject.error()
上的 Subject
所以我在错误后再次重新定义它
Component.ts
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
this.searchObs = new Subject();
});
}
我有一个指令,我想添加 @Input observable 以通过该指令处理 http observable 的成功和失败场景
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')
);
}
}
}
}
我的组件 api 可观察到
searchObs = new Subject();
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
});
}
现在我得到了订阅的第一个值,无论它是指令中的成功还是错误,然后没有数据绑定到指令。
主要问题是 Subject
错误处理关闭了 Subject.error()
上的 Subject
所以我在错误后再次重新定义它
Component.ts
this.apiservice.getData(args).subscribe((data) => {
this.searchObs.next(data);
}, err => {
this.searchObs.error(err);
this.searchObs = new Subject();
});
}