在模板中,使用|
符號來調用一個管道操做,使用:
來向管道傳入參數。{{ data | <pipename>:<arg1>:<arg2> }}
數組
pure pipe(無狀態管道)
和impure pipe(有狀態管道)
pure
標誌賦值爲false,能夠聲明管道爲impure類型。咱們將pure
標誌賦值爲false
,能夠聲明管道爲impure
類型。@Pipe({
name: 'flyingHeroes',
pure: false
})
@pipe({
name:"countdown",
pure : false
})
class EzCountdown{
transform(input){
this.initOnce(input);
return this.counter;
}
initOnce(input){
if(this.initialized) return;
this.initialized = true;
var self =this;
self.counter = input;
self.timer = setInterval(_ => {
self.counter--;
if(self.counter===0)
clearInterval(self.timer);
},1000);
}
}
Angular2
框架在輸入不變的 狀況下依然持續地進行變化檢測,而不在於咱們一般所指的計算的冪等性 - 即一樣的輸入 老是產生一樣的輸出。一個計算累加值的管道,在傳統的概念中,應當被視爲有狀態的,由於它對於一樣的輸 入,會累加以前記錄的總和,所以會產生不一樣的輸出。可是,在Angular2
中,它依然被視爲無 狀態的,由於,它的一次輸入不會產生屢次輸出。angular2
DatePipe
、UpperCasePipe
、LowerCasePipe
、CurrencyPipe
、PercentPipe
等。currency:'EUR'
。若是是多個參數,參數值之間也用冒號隔開,例如slice:1:5
。例如:April, 15, 1988
顯示成04/15/88
:
<p>The hero's birthday is {{ birthday | date:"MM/dd/yy" }} </p>
,
這裏的date
爲內建管道DatePipe
的名字,"MM/dd/yy"
爲傳入的參數app
pipe
是一個類,使用@Pipe
裝飾器提供元數據。@Pipe
裝飾器接收的對象有name屬性,它的值就是咱們在模板表達式中使用的管道的名稱pipe
類實現PipeTransform
接口的transform
方法。該方法接收一個輸入值和一個可選的參數數組,返回轉換後的值。//app/exponential-strength.pipe.ts import {Pipe, PipeTransform} from 'angular2/core'; @Pipe({name: 'exponentialStrength'}) export class ExponentialStrengthPipe implements PipeTransform { transform(value:number, [exponent]) : number { var exp = parseFloat(exponent); return Math.pow(value, isNaN(exp) ? 1 : exp); } }
使用方式跟內建管道同樣。可是咱們要在組件的@Component
的pipes
數組中列出咱們的自定義管道。
框架
@Component({
selector: 'power-booster',
template:Power Booster Super power boost: {{2 | exponentialStrength: 10}}
,
pipes: [ExponentialStrengthPipe]
})
export class PowerBooster { }
Power Booster Super power boost: {{2 | exponentialStrength: 10}}
<p>The chained hero's birthday is {{ ( birthday | date:'fullDate' ) | uppercase}}</p>
當管道須要參數的時候,注意使用括號使得順序看得更清楚。