[英]Why does not it work async pipe?
@Pipe({
name: 'trans',
pure: false
})
export class RandomPipe implements PipeTransform {
constructor(private cdRef:ChangeDetectorRef) {
}
transform(value:string):any {
return new AsyncPipe(this.cdRef).transform(new Observable<string>(observer=>{
observer.next('rand1');
setTimeout(()=>{
observer.next('rand@2');
})
}));
}
}
它仅适用于'rand1'字符串-同步,但只能使用observer.next('rand @ 2');
不起作用-异步。 如何使其工作?
您可以尝试通过以下方式实现它:
@Pipe({
name: 'someRand',
pure: false
})
export class RandomPipe implements PipeTransform {
constructor(private cdRef:ChangeDetectorRef) {}
pipe: AsyncPipe;
obs: Observable<string>;
transform(value:string):any {
if (!this.pipe) {
this.pipe = new AsyncPipe(this.cdRef);
this.obs = new Observable<string>(observer=>{
observer.next('rand1');
setTimeout(()=>{
observer.next('rand@2');
}, 500)
});
}
return this.pipe.transform(this.obs);
}
}
另请参见柱塞示例
您在这里不需要AsyncPipe
@Pipe({
name: 'trans',
pure: false
})
export class RandomPipe implements PipeTransform {
constructor(private cdRef:ChangeDetectorRef) {
}
transform(value:string):any {
return new Observable<string>(observer=>{
observer.next('rand1');
setTimeout(()=>{
observer.next('rand@2');
})
}));
}
}
然后使用异步管道
{{someValue | trans | async }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.