Angular 2.x折腾记 :(5) 动手实现一个自定义管道

简介: 管道这东西,可以让用户的体验变得好,也可以省去我们一些重复性的工作;官方的内置管道就不解释了,自行看文档吧


前言


管道这东西,可以让用户的体验变得好,也可以省去我们一些重复性的工作;

官方的内置管道就不解释了,自行看文档吧


管道的常规使用


一般是用于Mustache语法的双向数据内,eg: {{item | json}}

上面的例子是用了内置的JsonPipe管道,有人说管道带参数怎么搞?,eg :{{item |slice:0:4 }}


管道后面冒号跟随的就是参数, 也许还有人问如何多重管道调用? eg :{{item | slice:0:4 | uppercase}}


这里看出来了么,这是使用了数据流的概念,用过linux管道的小伙伴一看就知道了。

item 的输入数据给slice处理后再丢给uppercase处理,最终返回的期望的结果集。


书写一个自定义管道


Demo写法


// 自定义管道必须依赖这两个
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, end, extraStr );
          return value.slice(start, end) + extraStr.toString();
        } else {
          return value.slice(start, end);
        }
      } else {
        return value;
      }
    } else {
      return value;
    }
  }
}


上面的效果图,结合[title]实现数据截取,悬浮看到完整的数据


如何使一个自定义管道生效


单一引入生效


// 功能管道
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';


使用


视图绑定


这是视图绑定的使用方法,那若是放在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) || '',


效果图


目录
相关文章
|
3月前
|
前端开发 开发者 C#
深度解析 Uno Platform 中的 MVVM 模式:从理论到实践的全方位指南,助你轻松掌握通过 C# 与 XAML 构建高效可维护的跨平台应用秘籍
【8月更文挑战第31天】本文详细介绍如何在优秀的跨平台 UI 框架 Uno Platform 中实施 MVVM(Model-View-ViewModel)模式,通过一个简单的待办事项列表应用演示其实现过程。MVVM 模式有助于分离视图层与业务逻辑层,提升代码组织性、易测性和可维护性。Uno Platform 的数据绑定机制使视图与模型间的同步变得高效简便。文章通过构造 `TodoListViewModel` 类及其相关视图,展示了如何解耦视图与模型,实现动态数据绑定及命令处理,从而提高代码质量和开发效率。通过这一模式,开发者能更轻松地构建复杂的跨平台应用。
53 0
|
3月前
|
JavaScript 前端开发
如何在 Angular 中为响应式表单创建自定义验证器
如何在 Angular 中为响应式表单创建自定义验证器
25 0
|
3月前
|
JavaScript
如何在自定义 Angular 指令中使用 @HostBinding 和 @HostListener
如何在自定义 Angular 指令中使用 @HostBinding 和 @HostListener
36 0
|
3月前
在Angular中创建自定义管道
在Angular中创建自定义管道
16 0
|
3月前
|
JavaScript 安全
如何在 Angular Material 中使用自定义 SVG 图标
如何在 Angular Material 中使用自定义 SVG 图标
69 0
|
3月前
|
JavaScript
如何使用 ControlValueAccessor 在 Angular 中创建自定义表单控件
如何使用 ControlValueAccessor 在 Angular 中创建自定义表单控件
22 0
|
6月前
|
Perl
【不明觉厉】Angular的 pure pipe (纯管道) 和 impure pipe (非纯管道) 是啥意思?
【不明觉厉】Angular的 pure pipe (纯管道) 和 impure pipe (非纯管道) 是啥意思?
【不明觉厉】Angular的 pure pipe (纯管道) 和 impure pipe (非纯管道) 是啥意思?
|
JavaScript 定位技术
Angular1.x入门级自定义组件(导航条)
Angular1.x入门级自定义组件(导航条)
|
JavaScript 前端开发 API
让Angular自定义组件支持form表单验证
让Angular自定义组件支持form表单验证
160 0
|
Perl
Angular最新教程-第十三节 管道Pipes 自定义管道
Angular最新教程-第十三节 管道Pipes 自定义管道
145 0
Angular最新教程-第十三节 管道Pipes 自定义管道