前言
管道这东西,可以让用户的体验变得好,也可以省去我们一些重复性的工作; 官方的内置管道就不解释了。。自行看文档吧
管道的常规使用
一般是用于Mustache语法的双向数据内,eg: {{item | json}}
上面的例子是用了内置的JsonPipe管道。。有人说管道带参数怎么搞?,eg :{{item |slice:0:4 }}
管道后面冒号跟随的就是参数,也许还有人问如何多重管道调用? , eg :{{item | slice:0:4 | uppercase}}
这里看出来了么,这是使用了数据流的概念,用过linux管道的小伙伴一看就知道了。。item
的输入数据
给slice
处理后再丢给uppercase
处理,最终返回的结果集就是切割后并且转为大写字符的数据
书写一个自定义管道
- Demo写法
- 实现一个切割字符串然后拼接…的管道【用于渲染数据过长截取】
局部代码的写法 — 这是视图绑定的使用方法,那若是放在ts里面如何使用一个管道呢。。且看我道来
@H_502_39@ <td [title]="item.SupplierName">{{item.SupplierName | SliceStr:0:13:'...' || '' }}</td>局部代码的写法 — ts内管道处理数据
@H_502_39@// 引入日期转换管道 import { TransDatePipe } from '../../../../../widgets/mit-pipe/TransDate/trans-date.pipe'; // 使用自定义管道处理ts内的数据 const PublishDate: new TransDatePipe().transform(res.Data.PublishDate) || '',如何使一个自定义管道生效
- 单一引入生效
- 模块引入
我们这边,是写了一组管道,然后放到一个自定义模块里面,最后导出
在其他模块引入这个模块就能直接使用了。。
@H_502_39@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';总结
管道的写法并不复杂,复杂的是你想要在管道内实现怎么样的功能,考虑拓展性,可读性,复用性!