zoukankan      html  css  js  c++  java
  • Angular2 Pipe(管道)

    使用方法

    • 在angular1的版本中有“过滤器-filter”的概念,在angular2的版本中换成了pipe(管道),写法也比较简单,功能和filter一样,都是在页面上对参数进行状态转换
    • Angular2中管道的作用:在模板中对输入数据进行变换,并输出变换后的结果。
    • 在模板中,使用|符号来调用一个管道操作,使用:来向管道传入参数。{{ data | <pipename>:<arg1>:<arg2> }}

    管道的类型

    • 主要存在两种类型的管道,pure pipe(无状态管道)impure pipe(有状态管道)
    • 我们将pure标志赋值为false,可以声明管道为impure类型。我们将pure标志赋值为false,可以声明管道为impure类型。
      @Pipe({
      name: 'flyingHeroes',
      pure: false
      })
    • 无状态管道,当输入没有变化时,Angular2框架不会重新计算管道的输出。
    • 有状态管道,Angular2框架在每个变化检查周期都执行 管道的transform()方法。
      使用管道,实现一个倒数计时器
        @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中,它依然被视为无 状态的,因为,它的一次输入不会产生多次输出

    内建管道

    • Angular2提供了很多内建的管道函数,例如:DatePipeUpperCasePipeLowerCasePipeCurrencyPipePercentPipe等。
    • 管道函数可以接收任意数量的参数
    • 在管道名称的后面添加冒号(:)和参数值,例如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"为传入的参数

    自定义管道

    • 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);
    }
    }

    自定义管道的使用

    使用方式跟内建管道一样。但是我们要在组件的@Componentpipes数组中列出我们的自定义管道。

    @Component({
      selector: 'power-booster',
      template: `
        Power Booster
        Super power boost: {{2 | exponentialStrength: 10}}
        `
      ,
      pipes: [ExponentialStrengthPipe]
    })
    export class PowerBooster { }
    

    管道链

    • <p>The chained hero's birthday is {{ ( birthday | date:'fullDate' ) | uppercase}}</p>当管道需要参数的时候,注意使用括号使得顺序看得更清楚。
  • 相关阅读:
    拓端数据|R语言乘法GARCH模型对高频交易数据进行波动性预测
    拓端数据|Python中用Prophet模型对天气时间序列进行预测与异常检测
    拓端数据|R语言:状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列
    拓端数据|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
    拓端数据|数据挖掘:香水电商销售策略分析
    UOJ#523. 【美团杯2020】半前缀计数 后缀自动机
    LuoguP6688 可重集 线段树+hash
    LuoguP6687 论如何玩转 Excel 表格 树状数组
    LOJ#2303. 「NOI2017」蚯蚓排队 hash+链表
    LOJ#6289. 花朵 树链剖分+分治NTT
  • 原文地址:https://www.cnblogs.com/HXW-from-DJTU/p/6645333.html
Copyright © 2011-2022 走看看