Angular 2 + 折腾记 :(5) 动手实现一个自定义管道
发布时间:2020-12-17 09:25:44 所属栏目:安全 来源:网络整理
导读:前言 管道这东西,可以让用户的体验变得好,也可以省去我们一些重复性的工作;官方的内置管道就不解释了。。自行看文档吧 管道的常规使用 一般是用于Mustache语法的双向数据内,eg: {{item | json}} 上面的例子是用了内置的JsonPipe管道。。有人说管道带参数
前言管道这东西,可以让用户的体验变得好,也可以省去我们一些重复性的工作; 官方的内置管道就不解释了。。自行看文档吧 管道的常规使用一般是用于Mustache语法的双向数据内,eg: 上面的例子是用了内置的JsonPipe管道。。有人说管道带参数怎么搞?,eg : 管道后面冒号跟随的就是参数,也许还有人问如何多重管道调用? , eg : 这里看出来了么,这是使用了数据流的概念,用过linux管道的小伙伴一看就知道了。。 给 书写一个自定义管道
// 自定义管道必须依赖这两个
import { Pipe,PipeTransform } from '@angular/core';
// 管道装师符 , name就是管道名称
@Pipe({
name: 'name'
})
export class PipeNamePipe implements PipeTransform {
// value : 就是传入的值
// ...args : 参数集合(用了...拓展符),会把数组内的值依次作为参数传入
// ...args可以改成我们常规的写法(value:any,start:number,end:number)
transform(value: any,...args: any[]): any {
}
}
import { Pipe,PipeTransform } from '@angular/core';
@Pipe({
name: 'SliceStr'
})
export class SliceStrPipe implements PipeTransform {
/** * 截图字符串字符 * option(start,end,[+str]) */
// start和end及extraStr后面都跟随了一个问好,代表这个为可选参数而不是必选的
// 功能就是给出截图的启示,然后是否拼接你自定义的字符串(...)等
transform(value: string,start?: number,end?: number,extraStr?: string): string {
// console.log( value );
if (value) {
if (typeof (start) === 'number' && typeof (end) === 'number') {
if (value.length > end && extraStr && typeof (extraStr) === 'string') {
// console.log( start,extraStr );
return value.slice(start,end) + extraStr.toString();
} else {
return value.slice(start,end);
}
} else {
return value;
}
} else {
return value;
}
}
}
局部代码的写法 — 这是视图绑定的使用方法,那若是放在ts里面如何使用一个管道呢。。且看我道来 <td [title]="item.SupplierName">{{item.SupplierName | SliceStr:0:13:'...' || '' }}</td>
局部代码的写法 — ts内管道处理数据 // 引入日期转换管道
import { TransDatePipe } from '../../../../../widgets/mit-pipe/TransDate/trans-date.pipe';
// 使用自定义管道处理ts内的数据
const PublishDate: new TransDatePipe().transform(res.Data.PublishDate) || '',
如何使一个自定义管道生效
// 功能管道
import { SliceStrPipe } from './SliceStr/slice-str.pipe';
@NgModule( {
imports: [
CommonModule
],declarations: [
SliceStrPipe // 管道生效必须放到declarations里面
],schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
我们这边,是写了一组管道,然后放到一个自定义模块里面,最后导出 在其他模块引入这个模块就能直接使用了。。 import ..........
const pipe = [
IsCitizenIDPipe,IsEmailPipe,IsEnhancePasswordPipe,IsFixedPhonePipe,IsLicensePipe,IsMobilePhonePipe,IsNormalPasswordPipe,IsNumberPipe,IsUsernamePipe,SliceStrPipe,TimeDifferencePipe,TransDatePipe,ThousandSeparationPipe
];
@NgModule( {
imports: [
CommonModule
],declarations: [
MitPipeComponent,...pipe,],exports: [ ...pipe ],schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
export class MitPipeModule { }
// ----- 引入module
// 管道 -- 把MitPipeModule丢到imports里面就行了
import { MitPipeModule } from '../../../../../widgets/mit-pipe/mit-pipe.module';
总结管道的写法并不复杂,复杂的是你想要在管道内实现怎么样的功能,考虑拓展性,可读性,复用性! 下一篇扯下自定义指令的~~~~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- unix – 如何使用dd覆盖二进制文件的某些字节?
- 角 – 没有找到组件工厂.你有没有把它添加到@ NgModule.ent
- WebService学习总结(四)——调用第三方提供的webService服务
- angularjs – 动态加载控制器和ng-include
- Redis 可视化工具 Redis Desktop Manager 和 treeNMS 的使用
- /var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在
- angularjs – 限制不起作用
- AngularJS仅在父控制器完成异步调用时加载控制器
- 在Window 10上安装Docker图文教程
- angularjs – e2e量角器测试需要oauth认证