• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:17:53
    文檔

    Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法

    Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法:現(xiàn)在,我們寫一個組件puppiesListCmp,用于顯示小狗狗的列表: //puppies-list.component.ts @Component({ selector: 'puppies-list', template: ` <div *ngFor=let puppy of puppies> <span&g
    推薦度:
    導(dǎo)讀Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法:現(xiàn)在,我們寫一個組件puppiesListCmp,用于顯示小狗狗的列表: //puppies-list.component.ts @Component({ selector: 'puppies-list', template: ` <div *ngFor=let puppy of puppies> <span&g

    現(xiàn)在,我們寫一個組件puppiesListCmp,用于顯示小狗狗的列表:

    //puppies-list.component.ts
    @Component({
     selector: 'puppies-list',
     template: `
     <div *ngFor="let puppy of puppies">
     <span>{{puppy.name}}</span>
     <span>{{puppy.age}}</span>
     <span>{{puppy.color}}</span>
     </div>
    `
    })
    export class puppiesListCmp{
     @Input() puppies: Puppy[];
    }
    interface Puppy {
     name: string,
     age: number,
     color: string
    }

    然后這樣使用:

    //app.component.ts
    @Component({
     selector: 'my-app',
     template: `
     <puppies-list [puppies]="puppies"></puppies-list>
    `
    })
    export class App{
     puppies = [
     {
     name: "sam",
     age: 0.6,
     color: "yellow"
     },
     {
     name: "bingo",
     age: 1.5,
     color: "black"
     }
     ]
    }

    效果就行這樣:

    但是,我希望我們的puppiesListCmp組件可以滿足不同的需求,比如在數(shù)據(jù)不變的情況下只顯示小狗狗的name和color,就像這樣:

    這就是本文的重點了。我們需要實現(xiàn)用戶自定義模板!

    現(xiàn)在我們不寫死組件的模板了,而是讓用戶從外部輸入!

    首先,我們的組件模板:

    <div *ngFor="let puppy of puppies">
     <span>{{puppy.name}}</span>
     <span>{{puppy.age}}</span>
     <span>{{puppy.color}}</span>
    </div>

    等價于:

    <ng-template ngFor let-puppy [ngForOf]="puppies">
     <div>
     <span>{{puppy.name}}</span>
     <span>{{puppy.age}}</span>
     <span>{{puppy.color}}</span>
     </div>
    </ng-template>

    然后,用@ContentChild(關(guān)于@ContentChild可以查看這里,需FQ)獲取到外部(相對puppiesListCmp組件而言)自定義模板,并賦給ngForTemplate。也就是說,這部分:

    <div>
     <span>{{puppy.name}}</span>
     <span>{{puppy.age}}</span>
     <span>{{puppy.color}}</span>
    </div>

    不再像之前那樣寫死在組件里了,而是由使用者在父組件中自定義,然后利用Angular的內(nèi)容投射(Content Projection),投射到puppiesListCmp組件里面。就像這樣:

    //puppies-list.component.ts
    import { Component, Input, ContentChild, TemplateRef } from '@angular/core';
    import { NgForOfContext } from '@angular/common';
    @Component({
     selector: 'puppies-list',
     template: `
    <ng-template ngFor let-puppy [ngForOf]="puppies" [ngForTemplate]="tpl"></ng-template>
    `
    })
    export class puppiesListCmp{
     @Input() puppies: Puppy[];
     @ContentChild(TemplateRef) tpl: TemplateRef<NgForOfContext<Puppy>>
    }
    interface Puppy {
     name: string,
     age: number,
     color: string
    }

    這樣我們的組件就算完成了。然后我們使用它:

    //app.component.ts
    @Component({
     selector: 'my-app',
     template: `
    <puppies-list [puppies]="puppies">
     <ng-template let-puppy>
     <div>
     <span>{{puppy.name}}</span>
     <span>{{puppy.age}}</span>
     <span>{{puppy.color}}</span>
     </div>
     </ng-template>
    </puppies-list>
    `
    })

    效果還是一樣的:

    如果我們只要顯示小狗狗的name和color,只要這樣寫就好了:

    //app.component.ts
    @Component({
     selector: 'my-app',
     template: `
    <puppies-list [puppies]="puppies">
     <ng-template let-puppy>
     <div>
     <span>{{puppy.name}}</span>
     <span>{{puppy.color}}</span>
     </div>
     </ng-template>
    </puppies-list>
    `
    })

    效果就像這樣:

    這樣的組件很靈活,想要什么樣的效果都可以定制,這就實現(xiàn)了組件的復(fù)用。

    好了,本文就到此為止了。不當(dāng)之處,歡迎指出!希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

    文檔

    Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法

    Angular利用內(nèi)容投射向組件輸入ngForOf模板的方法:現(xiàn)在,我們寫一個組件puppiesListCmp,用于顯示小狗狗的列表: //puppies-list.component.ts @Component({ selector: 'puppies-list', template: ` <div *ngFor=let puppy of puppies> <span&g
    推薦度:
    標(biāo)簽: 組件 template angular
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 无码精品人妻一区二区三区中| 国产精品人人爽人人做我的可爱 | 成人国产精品999视频| 久久精品人妻一区二区三区| 精品国产污污免费网站| 中文无码精品一区二区三区| 国产精品成人小电影在线观看| 国产精品99精品久久免费| 在线精品亚洲| 免费精品久久久久久中文字幕| 久久精品中文字幕久久| 精品久久久久久久久午夜福利| 亚洲午夜精品一级在线播放放 | 91精品无码久久久久久五月天 | 2022国产精品最新在线| 1000部精品久久久久久久久| 一本色道久久88综合日韩精品| 精品久久久久久久中文字幕| 日韩精品成人一区二区三区| 97热久久免费频精品99| 色久综合网精品一区二区| 亚洲国产精品视频| 久久亚洲国产精品五月天婷| 国产精品无码久久四虎| 国产精品高清在线| 国产国拍亚洲精品福利| 99久久精品国产一区二区| 国产精品污视频| 国产一区二区精品| 国产精品怡红院永久免费| 99久久国语露脸精品国产| 国产久热精品无码激情| 久久国产乱子伦免费精品| 无码人妻精品一区二区在线视频| 中文精品无码中文字幕无码专区| 欧美激情精品久久久久久| 欧美日韩精品| 中文字幕精品久久| 亚洲av午夜福利精品一区人妖| 亚洲处破女AV日韩精品| 久久久久人妻一区精品色|