2016-10-08 2 views

Antwort

2

Sie können versuchen, es auf diese Weise achive:

@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('[email protected]'); 
     }, 500) 
     }); 
    } 

    return this.pipe.transform(this.obs); 
    } 
} 

Siehe auch Plunker Example

1

Sie brauchen nicht AsyncPipe hier

@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('[email protected]'); 
     }) 
    })); 
    } 
} 

und dann von der Asynchron-Rohr verwenden wie

{{someValue | trans | async }} 
+0

Wie nicht jedes Mal zu schreiben | asynchron}}? –

+0

Ohne Async-Aufrufe. Es gibt keine Möglichkeit, von asynchron zur Synchronisierung zurückzukehren. Mit der Async-Pipe in der Pipe kaufen Sie nichts und es gibt auch keine Möglichkeit. Was Sie tun können, ist nicht eine Rohrleitung zu verwenden, sondern den umgewandelten Wert in Ihrer Komponentenklasse zu berechnen und einer Eigenschaft zuzuweisen und dann nur an diese Eigenschaft zu binden (ohne eine Rohrleitung zu verwenden) –

+0

Also immer benutzen? | asynchron? –

Verwandte Themen