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模板中使用管道,如:
        <div>{{data | myCustomPipe:params}}</div>
 
注意:在模板中使用“|”符号来使用管道,转换参数是以“:”符号接在管道名称之后,如果由多个参数,可以顺序添加。如果需要同时使用多个管道处理数据可以按照转换顺序用“|”符号在尾部继续添加,
    如: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
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2022-01-28 23:50  满怀期望的人  阅读(241)  评论(0编辑  收藏  举报