欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Angular 4.x NgTemplateOutlet

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

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

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

NgTemplateOutlet 指令語法

復制代碼 代碼如下:

<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'};
}

基礎知識

TemplateRef

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

ViewContainerRef

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

<ng-template>

<ng-template> 用于定義模板,使用 * 語法糖的結構指令,最終都會轉換為 <ng-template> 模板指令,模板內的內容如果不進行處理,是不會在頁面中顯示。

<ng-container>

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

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

NgTemplateOutlet 源碼分析

NgTemplateOutlet 指令定義

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

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

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

NgTemplateOutlet 類輸入屬性

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

NgTemplateOutlet 指令聲明周期

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Angular2開發(fā)環(huán)境搭建教程之VS Code

    Angular2開發(fā)環(huán)境搭建教程之VS Code

    不久前WebStorm的頻繁卡死終于讓我受不鳥了,我決定換個輕量級的編輯器,嘗試了Emacs、Sublime text,最后選擇了vscode。下面這篇文章主要給大家介紹了關于Angular2開發(fā)環(huán)境搭建教程之VS Code的相關資料,需要的朋友可以參考下。
    2017-12-12
  • AngularJS入門教程之雙向綁定詳解

    AngularJS入門教程之雙向綁定詳解

    本文主要介紹AngularJS 雙向綁定,這里整理了詳細的知識資料并講解,而且附有代碼示例,有興趣的小伙伴可以參考下
    2016-08-08
  • Angular利用trackBy提升性能的方法

    Angular利用trackBy提升性能的方法

    這篇文章主要介紹了在Angular中利用trackBy來提升性能的實現(xiàn)方法,需要的朋友可以參考下
    2018-01-01
  • 3個可以改善用戶體驗的AngularJS指令介紹

    3個可以改善用戶體驗的AngularJS指令介紹

    這篇文章主要介紹了3個可以改善用戶體驗的AngularJS指令,AngularJS是一款具有很高人氣的JavaScript框架,需要的朋友可以參考下
    2015-06-06
  • Agularjs妙用雙向數(shù)據(jù)綁定實現(xiàn)手風琴效果

    Agularjs妙用雙向數(shù)據(jù)綁定實現(xiàn)手風琴效果

    最近在工作總遇到需要實現(xiàn)類似手風琴效果的需求,下面小編通過本文給大家分享angularjs巧用雙向數(shù)據(jù)綁定實現(xiàn)手風琴效果,需要的朋友可以參考下
    2017-05-05
  • AngularJS中的路由使用及實現(xiàn)代碼

    AngularJS中的路由使用及實現(xiàn)代碼

    本篇文章主要介紹了AngularJS中的路由使用及實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Angular4.0動畫操作實例詳解

    Angular4.0動畫操作實例詳解

    這篇文章主要介紹了Angular4.0動畫操作,結合實例形式詳細分析了Angular4.0動畫的原理、定義及使用等相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • Angular+Node生成隨機數(shù)的方法

    Angular+Node生成隨機數(shù)的方法

    這篇文章主要介紹了Angular+Node生成隨機數(shù)的方法,結合具體實例分析了Angular與Node結合控制前后端實現(xiàn)隨機數(shù)功能的相關操作技巧,需要的朋友可以參考下
    2017-06-06
  • 淺析Angular2子模塊以及異步加載

    淺析Angular2子模塊以及異步加載

    本篇文章主要介紹了淺析Angular2子模塊以及異步加載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 深入解析AngularJS框架中$scope的作用與生命周期

    深入解析AngularJS框架中$scope的作用與生命周期

    這篇文章主要介紹了AngularJS中$scope的作用與生命周期,包括在DOM中添加controller對象的相關用法,需要的朋友可以參考下
    2016-03-03

最新評論