Angular-管道


1、管道的作用 答:用于在模板表单式中对给定的数据进行转换和格式化,并输出处理后的数据,如:转换日期格式、货币格式、数字精度、过滤列表数据等   2、如何创建自定义管道 答:自定义管道实现了PipeTransform接口,并定义transform()方法,该方法接受给定的数据和转换参数,并返回转换后的结果     a、使用@Pipe装饰器定义管道类,如:         @Pipe({             name: 'myCustomPipe'         })         export class MyCustomPipe implements PipeTransform {             transform(value, transformParams) {                 return transformResult;             }         }         注意:
            value:给定的需要转换的数据             transformParams:转换数据用到的参数或者转换条件     b、并添加进@NgModule装饰器元数据对象属性declarations中     c、在html模板中使用管道,如:        
{{data | myCustomPipe:params}}
  注意:在模板中使用“|”符号来使用管道,转换参数是以“:”符号接在管道名称之后,如果由多个参数,可以顺序添加。如果需要同时使用多个管道处理数据可以按照转换顺序用“|”符号在尾部继续添加,     如:data | myCustomPipe: params | myCustomPipe: params | myCustomPipe   3、管道中的数据变更检测方式 答:管道会在每次dom事件之后(鼠标移动、计时器、服务器响应、按键)对绑定的需要转换的数据的变更进行检测,而且针对基础数据类型和应用类型的检测规则有所不同     a、针对基础数据类型的检测:对String\Number\Boolean\null\undefined\Symbol的变更,也称之为纯变更,采用的是纯管道(给定输入会返回固定的输出),会直接重新执行管道并返回转换结果     b、针对引用数据类型的检测:对Object\Function\Date\Array\Map\Set等的变更,也称之为非纯变更,采用的是非纯管道(即需要对数据进行深层次的检索来确定是否变更)     注意:在使用纯管道来处理引用类型的数据时,可以采取返回一个全新的数据对象来激活纯管道的变更检测机制,而非只更改数据内部的给别属性或者添加内容   4、纯管道和非纯管道 答:     a、纯管道:采用的是纯函数,返回一个没有副作用的结果,即发给定相同的输入,总是返回固定的值,创建管道默认是纯管道     b、非纯管道:将@Pipe装饰器元数据对象中的pure属性设置为false即可。其他部分于纯管道一致   5、从可观察对象中解包数据 答:angular内置的有一个AsyncPipe,此管道接受一个可观察对象,并自动调用此可观察对象,并返回该观察对象给出的值,可以用于异步获取服务器返回的数据 注意:该管道是一个非纯管道,其特点是每个绑定的管道都有自己的管道实例,彼此之间互不影响   6、管道的优先级 答:管道的优先级会高于其他一些运算符,所以需要在使用前对数据进行判断时,要用()包裹起来     7、Angular内置的非纯管道 答:AsyncPipe\JosnPipe\KeyValuePipe\SlicePipe