• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Angular2的管道Pipe的使用方法

    來源:懂視網 責編:小采 時間:2020-11-27 22:25:53
    文檔

    Angular2的管道Pipe的使用方法

    Angular2的管道Pipe的使用方法:管道Pipe可以將數(shù)據(jù)作為輸入,然后按照規(guī)則將其轉換并輸出。在Angular2中有許多內置的Pipe,比如DatePipe、UpperCasePipe和CurrencyPipe等。在這里我們主要介紹如何自定義Pipe。 1. 管道定義 Pipe的定義如下代碼所示: import { PipeTr
    推薦度:
    導讀Angular2的管道Pipe的使用方法:管道Pipe可以將數(shù)據(jù)作為輸入,然后按照規(guī)則將其轉換并輸出。在Angular2中有許多內置的Pipe,比如DatePipe、UpperCasePipe和CurrencyPipe等。在這里我們主要介紹如何自定義Pipe。 1. 管道定義 Pipe的定義如下代碼所示: import { PipeTr

    管道Pipe可以將數(shù)據(jù)作為輸入,然后按照規(guī)則將其轉換并輸出。在Angular2中有許多內置的Pipe,比如DatePipe、UpperCasePipe和CurrencyPipe等。在這里我們主要介紹如何自定義Pipe。

    1. 管道定義

    Pipe的定義如下代碼所示:

    import { PipeTransform, Pipe } from '@angular/core';
    
    /*users: Array<any> = [
     { name: '1', id: 1 },
     { name: '2', id: 2 },
     { name: '3', id: 3 },
     { name: '4', id: 4 },
     { name: '5', id: 5 },
     { name: '6', id: 6 }
    ];*/
    
    @Pipe({ name: 'filterUser' })
    export class FilterUserPipe implements PipeTransform {
     transform(allUsers: Array<any>, ...args: any[]): any {
     return allUsers.filter(user => user.id > 3);
     }
    }
    
    

    如代碼所示,

    1. 需要使用@Pipe來裝飾類
    2. 實現(xiàn)PipeTransform的transform方法,該方法接受一個輸入值和一些可選參數(shù)
    3. 在@Pipe裝飾器中指定管道的名字,這個名字就可以在模板中使用。

    注意:當定義完成后,不要忘記在Module的declarations數(shù)組中包含這個管道。

    2. 管道使用

    user.template.html實現(xiàn)如下所示:

    <div>
     <ul>
     <li *ngFor="let user of (users | filterUser)">
     {{user.name}}
     </li>
     </ul>
    </div>
    <button (click)="addUser()"> add new user</button>
    

    user.component.ts實現(xiàn)如下所示:

    import { Component } from "@angular/core";
    
    @Component({
     templateUrl: './user.template.html',
    })
    
    export class EnvAppComponent {
     id = 7;
     users: Array<any> = [
     { name: '1', id: 1 },
     { name: '2', id: 2 },
     { name: '3', id: 3 },
     { name: '4', id: 4 },
     { name: '5', id: 5 },
     { name: '6', id: 6 }
     ];
    
     addUser() {
     this.users.push({ name: this.id++, id: this.id++ })
     }
    }
    
    

    在user.component.ts中初始了數(shù)據(jù)users和定義一個添加user的方法,在user.template.html中使用自定義管道filterUser。

    當啟動應用時,可以發(fā)現(xiàn)只有id大于3的user被顯示出來了。可是,當你點擊按鈕添加用戶時,發(fā)現(xiàn)并沒有什么反應,數(shù)據(jù)并沒有改變。這是為什么呢?

    3. 數(shù)據(jù)變更檢測

    在Angular2中管道分為兩種:純管道和非純管道。默認情況下管道都是純管道。

    純管道就是在Angular檢測到它的輸入值發(fā)生了純變更時才會執(zhí)行管道。純變更也就是說原始數(shù)據(jù)類型(如String、Number和Boolean等)或者對象的引用發(fā)生變化。該管道會忽略對象內部的變化,在示例中,數(shù)組的引用沒有發(fā)生改變,改變的只是數(shù)組內部的數(shù)據(jù),所以當我們添加數(shù)據(jù)時并沒有立即響應在頁面上。

    非純管道會在組件的變更檢測周期中執(zhí)行,而且會對對象的內部數(shù)據(jù)進行檢測。

    在我們的示例中將管道變更為非純管道是非常賤簡單的,只要在管道元數(shù)據(jù)中將添加pure標志為false即可。

    代碼如下所示:

    @Pipe({ name: 'filterUser', pure: false })
    export class FilterUserPipe implements PipeTransform {
     transform(allUsers: Array<any>, ...args: any[]): any {
     return allUsers.filter(user => user.id > 3);
     }
    }
    

    這樣每當我們添加新用戶時,數(shù)據(jù)就會馬上響應在頁面上了。

    在根模塊聲明的pipe在頁面中引用有效,而在頁面中引用的component中的模板則無效,這也是令我困惑的地方...

    尋求了一些解決方案,大多是要注意得在根模塊中聲明,于是我做了個嘗試,將組件也寫成一個功能模塊,并在組件功能模塊中申明pipe,結果很欣喜,組件中的pipe生效了。

    具體操作方法:

    只需新建組件功能模塊,并在改模塊中申明pipe,myComponent.module.ts

    import { NgModule } from '@angular/core';
    import { IonicPageModule } from 'ionic-angular';
    import { myComponent } from 'myComponent.ts';
    import { HelloPipe } from "hello.pipe.ts";
    
    @NgModule({
     declarations: [
     myComponent,
     HelloPipe
     ],
    
     imports: [
     IonicPageModule.forChild(myComponent)
     ],
    
     exports: [
     myComponent
     ]
    })
    
    export class MyComponent {}
    
    

    大功告成,組件的模板引用pipe得以生效.

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Angular2的管道Pipe的使用方法

    Angular2的管道Pipe的使用方法:管道Pipe可以將數(shù)據(jù)作為輸入,然后按照規(guī)則將其轉換并輸出。在Angular2中有許多內置的Pipe,比如DatePipe、UpperCasePipe和CurrencyPipe等。在這里我們主要介紹如何自定義Pipe。 1. 管道定義 Pipe的定義如下代碼所示: import { PipeTr
    推薦度:
    標簽: 使用 用法 pi
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 青青青国产精品一区二区| 国内精品伊人久久久久av一坑| 日韩AV无码精品人妻系列| 国产欧美日本亚洲精品一5| 国产国产精品人在线观看| 香蕉依依精品视频在线播放| 亚洲精品小视频| 国产精品免费高清在线观看| 亚洲人成电影网站国产精品| 99久久精品无码一区二区毛片| 99久久国产热无码精品免费| 亚洲AV永久无码精品| 欧美日韩精品| 精品人妻伦一二三区久久| 1区1区3区4区产品芒果精品| 国产精品三级在线| 国产精品美女久久久久| 人妻少妇乱子伦精品| 亚洲国产午夜中文字幕精品黄网站 | 久久99久久99小草精品免视看| 熟妇人妻VA精品中文字幕| 亚洲欧洲精品无码AV| 日韩精品欧美国产在线| 久久精品一区二区三区中文字幕 | 国产精品高清一区二区人妖| 国产女人精品视频国产灰线| 久久久一本精品99久久精品66| 亚洲欧洲国产精品香蕉网| 亚洲精品WWW久久久久久| 亚洲国产精品一区二区第四页| 无码精品前田一区二区 | 久久99精品久久久久久水蜜桃 | 国产农村妇女毛片精品久久| 国产成人精品曰本亚洲79ren| 91精品观看91久久久久久| 99久久精品国产一区二区| 人精品影院| 精品久久久久一区二区三区| 久久国产精品免费一区| 四虎成人精品| 无码日韩精品一区二区三区免费|