加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 Pipe

发布时间:2020-12-17 10:39:05 所属栏目:安全 来源:网络整理
导读:AngularJs 1.x 中使用 来帮助我们转换templates中的输出,但在Angular2中使用的是 ,以下展示Angular 1.x and Angular 2中filter和pipe的对比: Angular 1.x Angular 2 Basic Pipes span style="color: #008000"// span style="color: #008000" span style="

AngularJs 1.x 中使用来帮助我们转换templates中的输出,但在Angular2中使用的是,以下展示Angular 1.x and Angular 2中filter和pipe的对比:

Basic Pipes

<span style="color: #008000">//<span style="color: #008000">
<span style="color: #000000">
import {Component,View,bootstrap} from 'angular2/angular2'<span style="color: #000000">;

@Component({
selector: 'pipes'<span style="color: #000000">
})
@View({
templateUrl: 'pipesTemplate.html'<span style="color: #000000">
})
<span style="color: #008000">//<span style="color: #008000"> Component controller
<span style="color: #000000">class PipesAppComponent {
date: Date;

constructor() {
<span style="color: #0000ff">this.date = <span style="color: #0000ff">new<span style="color: #000000"> Date();
}
}

bootstrap(PipesAppComponent);

Dates

{{date | date:'mediumDate'}}

{{date | date:'yMMMMd'}}

{{date | date:'shortTime'}}

结果:

New Pipes

decimal和percent是Angular2中新增的管道,参数规则是:{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.

decimal管道在模板中使用number关键字

@View({
templateUrl:
'pipesTemplate.html'<span style="color: #000000">
})

class PipesAppComponent {
grade: number;
rating: number;

constructor() {
<span style="color: #0000ff">this.grade = 0.99<span style="color: #000000">;
<span style="color: #0000ff">this.rating = 9.1243<span style="color: #000000">;
}
}

...

html

Decimals/Percentages

{{grade | percent:'.2'}}

{{rating | number:'2.1-2'}}

结果:

Async Pipe

Angular 2's async allows us to bind our templates directly to values that arrive asynchronously. This ability is great for working with promises and observables.

@Component({
selector:
'pipes'<span style="color: #000000">,changeDetection:
'ON_PUSH'<span style="color: #000000">
})
@View({
templateUrl:
'pipesTemplate.html'<span style="color: #000000">,})

class PipesAppComponent {
promise: Promise;

constructor() {
<span style="color: #0000ff">this.promise = <span style="color: #0000ff">new Promise(<span style="color: #0000ff">function<span style="color: #000000">(resolve,reject) {
setTimeout(<span style="color: #0000ff">function<span style="color: #000000">() {
resolve("Hey,I'm from a promise."<span style="color: #000000">);
},2000<span style="color: #000000">)
});
}
}

...

html

Async

{{ promise | async}}

After a 2 second delay,the value from the resolved promise will be displayed on the screen.

Custom Pipes

自定义pipe需要使用@Pipe装饰器,并实现PipeTransform接口里的transform方法。定义好的pipe要在需使用pipe的view或component中声明。

Pipe接口的定义

?:

PipeDecorator

export const Pipe: PipeDecorator = makeDecorator('Pipe', });

PipeTransform接口

  • pure 管道:仅当管道输入值变化的时候,才执行转换操作,默认的类型是 pure 类型。(备注:输入值变化是指原始数据类型如:string、number、boolean 等的数值或对象的引用值发生变化)

  • impure 管道:在每次变化检测期间都会执行,如鼠标点击或移动都会执行 impure 管道

'angular2/angular2'...

<span style="color: #008000">//<span style="color: #008000"> We use the @Pipe decorator to register the name of the pipe
<span style="color: #000000">@Pipe({
name: 'tempConvert'<span style="color: #000000">
})
<span style="color: #008000">//<span style="color: #008000"> The work of the pipe is handled in the tranform method with our pipe's class
<span style="color: #000000">class TempConvertPipe implements PipeTransform {
transform(value: number,args: any[]) {
<span style="color: #0000ff">if(value && !isNaN(value) && args[0] === 'celsius'<span style="color: #000000">) {
<span style="color: #0000ff">var temp = (value - 32) * 5/9;
<span style="color: #0000ff">var places = args[1<span style="color: #000000">];
<span style="color: #0000ff">return temp.toFixed(places) + ' C'<span style="color: #000000">;
}

</span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt;;

}
}

...

@View({
templateUrl: 'pipesTemplate.html'<span style="color: #000000">,<span style="color: #008000">//<span style="color: #008000"> We can pass the pipe class name into the pipes key to make it usable in our views
<span style="color: #000000"> pipes: [TempConvertPipe]
})

class PipesAppComponent {
temperature: number;

constructor() {
<span style="color: #0000ff">this.temperature = 85<span style="color: #000000">;
}
}

html

Custom Pipes - Convert Temperature

Fahrenheit: {{temperature + ' F'}}

Celsius: {{temperature | tempConvert:'celsius':1}}

结果

过滤出指定范围的值

定义一个pipe

import {Pipe, PipeTransform} from 'angular2/core'<span style="color: #008000">//<span style="color: #008000"> Tell Angular2 we're creating a Pipe with TypeScript decorators
<span style="color: #000000">@Pipe({
name: 'AgePipe'<span style="color: #000000">
})
export class AgePipe implements PipeTransform {

<span style="color: #008000">//<span style="color: #008000"> Transform is the new "return function(value,args)" in Angular 1.x
transform(value,args?<span style="color: #000000">) {
<span style="color: #008000">//<span style="color: #008000"> ES6 array destructuring
let [minAge,maxAge] =<span style="color: #000000"> args;
<span style="color: #0000ff">return input.filter(person =><span style="color: #000000"> {
<span style="color: #0000ff">return person.age >= +minAge && person.age <= +<span style="color: #000000">maxAge;
});
}

}

import {Component} from 'angular2/core''./pipes/age-pipe/age-pipe'@Component({
selector:
'playground-app'<span style="color: #000000">,templateUrl:
'app/playground.html'<span style="color: #000000">,<span style="color: #008000">//<span style="color: #008000"> tell our component it uses our AgePipe
<span style="color: #000000"> pipes: [AgePipe]
})
export class PlaygroundApp {
sliderValue:number = 20<span style="color: #000000">;
anotherSliderValue: number = 90<span style="color: #000000">;

people:Array =<span style="color: #000000"> [{
name: 'Justin Bieber'<span style="color: #000000">,age: 21<span style="color: #000000">
},{
name: 'Miley Cyrus'<span style="color: #000000">,age: 23<span style="color: #000000">
},{
name: 'John Legend'<span style="color: #000000">,age: 37<span style="color: #000000">
},{
name: 'Betty White'<span style="color: #000000">,age: 94<span style="color: #000000">
},{
name: 'Roger Waters'<span style="color: #000000">,age: 72<span style="color: #000000">
},{
name: 'Larry Page'<span style="color: #000000">,age: 42<span style="color: #000000">
}];
}

html

0 ="sliderValue"="sliderValue = $event.target.value" /> 100

{{ sliderValue }}

0 ="anotherSliderValue" /> 100

{{anotherSliderValue }}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

Angular 1.xAngular 2