我創建了一個基於該Angular.io tutorial on pipes一個簡單的狀態管道:angular2如何檢測有狀態管道中的更改?
@Pipe({
name: 'fetch',
pure: false
})
class FetchJsonPipe implements PipeTransform{
private fetchedValue = 'waiting';
private fetchedValue2 = 'waiting2';
transform(value:string, args:string[]):any {
setTimeout(() => {
this.fetchedValue = 'done';
this.fetchedValue2 = 'done2';
}, 3000);
return this.fetchedValue2;
}
}
@Component({ selector: 'sd-splash'
, template: 'hello ng2 {{ "5" | fetch }}'
, pipes: [FetchJsonPipe]
})
我的問題是,我從馬上#transform
返回this.fetchedValue
。 由於它只是一個字符串,它的返回值爲,值爲。稍後,當超時時間爲 完成時,我只需將值'done'
分配給屬性(也是 私有)。
Angular2如何知道初始結果'waiting'
不是最終的? 如何知道更新後的值將通過#fetchedValue
? 許是不暴露在所有,Angular2對名字,我把結果存儲在該領域的 的任何信息。
它唯一的線索是pure == false
,我想指示它 觀看實例變化。但我不知道它是如何獲得有關 哪些字段要收看的信息。
但它的工作!我不知道爲什麼。
乾杯
謝謝!以及它如何知道它應該爲新值查找'fetchedValue'屬性? – sevcsik
在更改檢測期間,angularjs檢查* all *綁定的更改。 – pixelbits
我更新了代碼示例以使用'#fetchedValue'和'#fetchedValue2'。如果我返回'this.fetchedValue2',它會在超時觸發時用'#fetchedValue2'正確更新值。我的問題是,它是如何知道它應該用'#fetchedValue2'更新視圖而不是'#fetchedValue'?轉換函數最初只返回「waiting」,沒有指出它的屬性。也沒有任何屬性綁定在任何地方。 – sevcsik