最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Angular 4.x NgTemplateOutlet

 更新時間:2017年05月24日 09:09:02   作者:semlinker  
這篇文章主要介紹了詳解Angular 4.x NgTemplateOutlet,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

該指令用于基于已有的 TemplateRef 對象,插入對應(yīng)的內(nèi)嵌視圖。在應(yīng)用 NgTemplateOutlet 指令時,我們可以通過 [ngTemplateOutletContext] 屬性來設(shè)置 EmbeddedViewRef 的上下文對象。綁定的上下文應(yīng)該是一個對象,此外可通過 let 語法來聲明綁定上下文對象屬性名。

友情提示:若 let 語法未綁定任何屬性名,則上下文對象中 $implicit 屬性,對應(yīng)的值將作為默認(rèn)值。

NgTemplateOutlet 指令語法

復(fù)制代碼 代碼如下:

<ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>

NgTemplateOutlet 使用示例

@Component({
 selector: 'ng-template-outlet-example',
 template: `
 <ng-container *ngTemplateOutlet="greet"></ng-container>
 <hr>
 <ng-container *ngTemplateOutlet="eng; context: myContext"></ng-container>
 <hr>
 <ng-container *ngTemplateOutlet="svk; context: myContext"></ng-container>
 <hr>
 <ng-template #greet><span>Hello</span></ng-template>
 <ng-template #eng let-name><span>Hello {{name}}!</span></ng-template>
 <ng-template #svk let-person="localSk"><span>Ahoj {{person}}!</span></ng-template>
`
})
class NgTemplateOutletExample {
 myContext = {$implicit: 'World', localSk: 'Svet'};
}

基礎(chǔ)知識

TemplateRef

TemplateRef 實例用于表示模板對象。

ViewContainerRef

ViewContainerRef 實例提供了 createEmbeddedView() 方法,該方法接收 TemplateRef 對象作為參數(shù),并將模板中的內(nèi)容作為容器 (comment 元素) 的兄弟元素,插入到頁面中。

<ng-template>

<ng-template> 用于定義模板,使用 * 語法糖的結(jié)構(gòu)指令,最終都會轉(zhuǎn)換為 <ng-template> 模板指令,模板內(nèi)的內(nèi)容如果不進(jìn)行處理,是不會在頁面中顯示。

<ng-container>

<ng-container> 是一個邏輯容器,可用于對節(jié)點進(jìn)行分組,但不作為 DOM 樹中的節(jié)點,它將被渲染為 HTML中的 comment 元素,它可用于避免添加額外的元素來使用結(jié)構(gòu)指令。

若想進(jìn)一步了解 <ng-template> <ng-container> 的區(qū)別,請參考Angular 4.x 動態(tài)創(chuàng)建組件 文章中我有話說版塊。

NgTemplateOutlet 源碼分析

NgTemplateOutlet 指令定義

@Directive({
 selector: '[ngTemplateOutlet]'
})

NgTemplateOutlet 類私有屬性及構(gòu)造函數(shù)

export class NgTemplateOutlet implements OnChanges {
 // 表示創(chuàng)建的內(nèi)嵌視圖
 private _viewRef: EmbeddedViewRef<any>; 
 // 注入ViewContainerRef實例
 constructor(private _viewContainerRef: ViewContainerRef) {}
}

NgTemplateOutlet 類輸入屬性

@Input() public ngTemplateOutletContext: Object; // 用于設(shè)定EmbeddedViewRef上下文
@Input() public ngTemplateOutlet: TemplateRef<any>; // 用于設(shè)定TemplateRef對象

NgTemplateOutlet 指令聲明周期

export class NgTemplateOutlet implements OnChanges {
 ngOnChanges(changes: SimpleChanges) {
 // 若this._viewRef已存在,則先從視圖容器中對應(yīng)的位置移除該視圖。
 if (this._viewRef) {
  this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));
 }
 // 若this.ngTemplateOutlet輸入屬性有綁定TemplateRef對象,則基于設(shè)定的上下文對象創(chuàng)建內(nèi)嵌視圖
 if (this.ngTemplateOutlet) {
  this._viewRef = this._viewContainerRef.createEmbeddedView(
   this.ngTemplateOutlet, this.ngTemplateOutletContext);
 }
 }
}

ngTemplateOutlet 指令的源碼相對比較簡單,如果讀者有興趣了解 createEmbeddedView() 方法的內(nèi)部實現(xiàn),可以參考 Angular 4.x NgIf 文章中的相關(guān)內(nèi)容。

另外需要注意的是使用 let 語法創(chuàng)建模板局部變量,若未設(shè)置綁定的值,則默認(rèn)是上下文對象中 $implicit 屬性對應(yīng)的值。為什么屬性名是 $implicit 呢?因為 Angular 不知道用戶會如何命名,所以定義了一個默認(rèn)的屬性名。 即 let-name="$implicit" let-name 是等價的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • angular json對象push到數(shù)組中的方法

    angular json對象push到數(shù)組中的方法

    下面小編就為大家分享一篇angular json對象push到數(shù)組中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • angular雙向綁定詳解

    angular雙向綁定詳解

    這篇文章主要為大家介紹了angular雙向綁定,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 詳解AngularJS controller調(diào)用factory

    詳解AngularJS controller調(diào)用factory

    本篇文章主要介紹了詳解AngularJS controller調(diào)用factory,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • angularJS 中input示例分享

    angularJS 中input示例分享

    這篇文章主要介紹了angularJS 中input示例分享,需要的朋友可以參考下
    2015-02-02
  • 詳解為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法

    詳解為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法

    所謂攔截器就是在目標(biāo)達(dá)到目的地之前對其進(jìn)行處理以便處理結(jié)果更加符合我們的預(yù)期。Angular的$http攔截器是通過$httpProvider.interceptors數(shù)組定義的一組攔截器,每個攔截器都是實現(xiàn)了某些特定方法的Factory。本文就介紹了為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法。
    2016-12-12
  • AngularJS出現(xiàn)$http異步后臺無法獲取請求參數(shù)問題的解決方法

    AngularJS出現(xiàn)$http異步后臺無法獲取請求參數(shù)問題的解決方法

    這篇文章主要介紹了AngularJS出現(xiàn)$http異步后臺無法獲取請求參數(shù)問題的解決方法,較為詳細(xì)的分析了AngularJS出現(xiàn)異步請求后臺無法解析的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2016-11-11
  • AngularJS 中ui-view傳參的實例詳解

    AngularJS 中ui-view傳參的實例詳解

    這篇文章主要介紹了AngularJS 中ui-view傳參的實例詳解的相關(guān)資料,這里提供實例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • AngularJS中控制器函數(shù)的定義與使用方法示例

    AngularJS中控制器函數(shù)的定義與使用方法示例

    這篇文章主要介紹了AngularJS中控制器函數(shù)的定義與使用方法,結(jié)合具體實例形式分析了AngularJS控制器函數(shù)的定義、綁定及相關(guān)使用技巧,需要的朋友可以參考下
    2017-10-10
  • Angular.JS去掉訪問路徑URL中的#號詳解

    Angular.JS去掉訪問路徑URL中的#號詳解

    最近天天都在用AngularJS,各類文檔也都看過好幾遍,但總是些編程上的事找不到優(yōu)雅的解決辦法。今天終于把AngularJS的項目訪問路徑URL里的#號去掉了,這個問題不見得有多難,關(guān)鍵是花多長時間去理解AngularJS框架本身,下面來看看詳細(xì)介紹,需要的朋友可以參考下。
    2017-03-03
  • AngularJs基本特性解析(一)

    AngularJs基本特性解析(一)

    angularjs是javascript的一個框架,通過script標(biāo)簽添加到網(wǎng)頁中。這篇文章主要介紹了AngularJs基本特性解析(一)的相關(guān)資料,需要的朋友可以參考下
    2016-07-07

最新評論

福建省| 沙湾县| 阳东县| 咸宁市| 江永县| 苗栗市| 罗田县| 乐东| 石景山区| 龙门县| 新晃| 邢台县| 鄂尔多斯市| 柯坪县| 连南| 樟树市| 浦江县| 南开区| 郓城县| 岢岚县| 金昌市| 保靖县| 吉安县| 清水县| 卢氏县| 鄂尔多斯市| 青冈县| 霸州市| 寿光市| 那曲县| 滦南县| 安溪县| 宕昌县| 韶关市| 上杭县| 缙云县| 石门县| 合江县| 金秀| 上栗县| 弥勒县|