本文涉及到的代码,位于这个 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 使用过程中参数传递错误的单步调试相关推荐

  1. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  2. 计算机视觉:Bag of words算法实现过程中出现错误及解决方案

    Bag of words算法实现过程中出现错误及解决方案 出现的问题 IndexError: list index out of range OSError:x.sift not found sqli ...

  3. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...

    之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...

  4. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)

    已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确.) 参考文章: (1)已成功与服务器建立连接 ...

  5. WSL(windows subsystem for linux)安装错误:安装过程中遇到错误,但可以继续安装。组件: ‘WSL 内核‘ 错误代码: 0x80072f78解决方法

    文章目录 问题来源 解决 参考 问题来源 使用管理员身份打开powershell,输入 wsl --install 之后等待安装: 结果,出现如下问题: PS C:\WINDOWS\system32& ...

  6. linux存储库rep 61082,安装informatic过程中的错误

    1.Check if the DISPLAY variable is set export DISPLAY=192.168.3.201:0.0 在注销用户并切换到oracle或者infa 用户,就可以 ...

  7. SQL SEVER登录失败,无法连接服务器或已成功与服务器建立连接,但是在登录过程中发生错误。(Win10版本,SQL 2019)

    一.首先无法登陆到服务器可以检查一下操作是否打开 1.点进服务器属性 2.然后点进安全性,看下服务器身份验证是SQL SEVER 和Windows身份验证模式,,以及登录审核是否是仅限失败的登录 二. ...

  8. SQL Server 2008 问题——已成功与服务器建立连接,但是在登录过程中发生错误。

    登录报错:已成功与服务器建立连接,但是在登录过程中发生错误. (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程. 解决办法:先用windows模式登录上去,然后 ...

  9. SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误

    SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误 SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误.provider: Shared M ...

最新文章

  1. BZOJ 3720 [洛谷P2137] : Gty的妹子树
  2. boost::io::ostream_joiner和boost::io::make_ostream_joiner用法的测试程序
  3. SAP C4C Mashup port bindingF4帮助对话框里的数据源
  4. C++面试常见问题一
  5. 【转载】(Git)用动图展示10大Git命令
  6. 盖茨庆祝万维网诞生30周年 庆幸自己有机会影响数字革命
  7. MAC OS 如何安装命令行工具:Command Line Tools
  8. 8.exchange2013实战操作之RMS
  9. Scherlokk for Mac(文件搜索软件)
  10. EDFbrowser查看edf文件及睡眠分期认识
  11. addr2line方法使用总结
  12. 视觉目标跟踪大牛主页
  13. ADS1115--已调通(附源码)
  14. 数据链路层(帧)(二)
  15. javase printwriter 打印流
  16. 【MySQL】MySQL乱码全面解析
  17. 在idea中创建xml文件
  18. 人工智能与机器学习——人脸表情识别
  19. 软件测试的发展趋势怎么样?
  20. SQL 连接 JOIN 例解

热门文章

  1. Spring AOP 应用篇
  2. ***解决UEditor编辑器无法插入第三方视频地址
  3. Node.js 博客实例(三)添加文件上传功能
  4. Thread源码阅读
  5. shell学习三十四天----printf详解
  6. Android下的Junit测试
  7. 田志刚:企业知识管理的知识传播
  8. 如何做好工程监理控制工作?
  9. PyCharm2020.2.3社区版安装,配置及使用教程(Windows)
  10. C#中的变量、常量、数据类型