2017-01-25 48 views
1

Angular 1中,當我們想要格式化表達式的值以供用戶顯示時,我們使用角度Filters。在Angular 2,我們使用Pipe相同。爲什麼角度2「過濾器」被稱爲「管道」?

角1個過濾器:

HTML:

<p> {{ greetings | reverse }}</p> 

JS:

app.filter('reverse', function() { 
    return function(input, uppercase) { 
    input = input || ''; 
    var out = ''; 
    for (var i = 0; i < input.length; i++) { 
     out = input.charAt(i) + out; 
    } 
    // conditional based on optional argument 
    if (uppercase) { 
     out = out.toUpperCase(); 
    } 
    return out; 
    }; 
}); 

角2

HTML:

<p> {{ greetings | reverse }}</p> 

打字稿:

import { Pipe, PipeTransform } from '@angular/core'; 

@Pipe({name: 'reverse'}) 
export class ReversePipe { 
    transform(input:string): string { 
    input = input || ''; 
    let out = ''; 
    for (var i = 0; i < input.length; i++) { 
     out = input.charAt(i) + out; 
    } 
    return out; 
    } 
} 

通過查看代碼,可以得出結論,無論做同樣的事情。兩者都有相同的角色和責任。我想知道的是爲什麼它們在Angular 2中被重命名爲Pipe?

+0

所以,你想知道什麼是'管道'? –

+1

這是因爲'| '運營商這是知道的管道。名字來自運營商名稱。 –

+0

但管道運營商是與過濾器也...爲什麼投下票?我錯過了什麼? –

回答

2

由於Pipe具有更一般的含義,不僅用於過濾。

您可能還需要從docs閱讀一段關於爲什麼filter是角2缺席:

角不進行過濾或排序列表管船。 熟悉Angular 1的開發人員將這些視爲過濾器和orderBy。 Angular 2中沒有等價物。

這不是疏忽。 Angular 2不太可能提供這樣的管道 ,因爲(a)它們表現不佳,並且(b)它們防止進攻性的縮小。 filter和orderBy都需要參數 引用對象屬性。我們之前瞭解到,此類管道必須是不純的,並且在幾乎每個變化 檢測週期中,Angular都會調用不純管道。

過濾和特別是排序是昂貴的操作。當用戶 的經驗可以嚴重降級甚至中等大小的列表時,角度調用這些管道方法每秒多次。這個過濾器和 orderBy在Angular 1應用程序中經常被濫用,導致 抱怨Angular本身很慢。這個費用在 間接意義上說是公平的,即Angular 1通過 準備了這個性能陷阱,首先提供了filter和orderBy。