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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ng-template 使用过程中参数传递错误的单步调试

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ng-template 使用过程中参数传递错误的单步调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文涉及到的代碼,位于這個 Github 倉庫:https://github.com/wangzixi-diablo/ngDynamic

問題描述

我使用如下代碼,期望在使用 *ngTemplateOutlet 指令動態創建 template 實例時,能夠進行參數傳遞:

<ng-template #inputTemplateWithContent let-param let-name="name"><div>參數1: {{param}}</div><div>參數2: {{name}}</div> </ng-template><ng-container *ngTemplateOutlet="inputTemplateWithContent; context: myContext"></ng-container> <br>

傳遞的參數 myContext 定義在 Component class 里:

問題在于,運行時第一個 div 元素里,顯示的值是空的:

問題分析

我們還是采取單步調試的方式來查找問題:

因為 ng-template 并不會直接出現在最終渲染的 HTML 代碼里,而是將其內部包裹的 HTML 原生標簽,使用瀏覽器原生的 native API appendChild,動態插入到 DOM 樹中。如下圖所示:

comment 元素采取 createComment 方法創建:

node_value 是 container,這也是最后在 Chrome 開發者工具 elements 標簽頁里觀察到的 container:

動態創建了 div 元素:

這個 div 元素目前還是空的:

也就是 ng-template 里被包裹的元素:

上述代碼被執行后,我們在 Chrome 開發者工具里看到了一個空的 div 標簽:

同理,第二個 div 標簽也生成了:

我們可以使用一個小技巧:將 myContext 替換成一個 get 函數,這樣我們就可以在 get 函數里設置斷點進行調試,從而找到 template 上下文參數傳遞的準確代碼位置了。

圖中高亮的上下文棧幀,直接跳轉到了我們編寫的 get 函數:

如圖:

解決方案

將模板變量參數傳遞修改為如下代碼:

<ng-template #inputTemplateWithContent let-param11="param" let-name="name"><div>參數1: {{param11}}</div><div>參數2: {{name}}</div> </ng-template>

注意,我們使用關鍵字 let-param11,定義了一個新的僅僅能在該模板內部使用的臨時變量,param11.

總結

以上是生活随笔為你收集整理的ng-template 使用过程中参数传递错误的单步调试的全部內容,希望文章能夠幫你解決所遇到的問題。

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