日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ng-template和ngTemplateOutlet

發布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ng-template和ngTemplateOutlet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們可以使用ng-container, ng-template和ngTemplateOutlet 三者的配合,實現動態渲染某個模板視圖的目的。

ng build之后,在Chrome開發者工具里看到ng文件夾下對應的html文件:

<ng-template #inputTemplate><input><h1>ngTemplateOutlet的用法</h1> </ng-template><ng-container *ngTemplateOutlet="inputTemplate"></ng-container>

tNode指向源代碼里的ng-container節點:

ngTemplateOutlet的實現:

/*** @ngModule CommonModule** @description** Inserts an embedded view from a prepared `TemplateRef`.** You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.* `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding* by the local template `let` declarations.** @usageNotes* ```* <ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>* ```** Using the key `$implicit` in the context object will set its value as default.** ### Example** {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}** @publicApi*/ @Directive({selector: '[ngTemplateOutlet]'}) export class NgTemplateOutlet implements OnChanges {private _viewRef: EmbeddedViewRef<any>|null = null;/*** A context object to attach to the {@link EmbeddedViewRef}. This should be an* object, the object's keys will be available for binding by the local template `let`* declarations.* Using the key `$implicit` in the context object will set its value as default.*/@Input() public ngTemplateOutletContext: Object|null = null;/*** A string defining the template reference and optionally the context object for the template.*/@Input() public ngTemplateOutlet: TemplateRef<any>|null = null;constructor(private _viewContainerRef: ViewContainerRef) {}ngOnChanges(changes: SimpleChanges) {const recreateView = this._shouldRecreateView(changes);if (recreateView) {const viewContainerRef = this._viewContainerRef;if (this._viewRef) {viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));}this._viewRef = this.ngTemplateOutlet ?viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext) :null;} else if (this._viewRef && this.ngTemplateOutletContext) {this._updateExistingContext(this.ngTemplateOutletContext);}}

還是老套路,在ngOnChanges里調用ViewContainerRef.createEmbeddedView:

更多Jerry的原創文章,盡在:“汪子熙”:

總結

以上是生活随笔為你收集整理的ng-template和ngTemplateOutlet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。