html - 通过 attr 进行 Angular 属性绑定。使用@Attribute 时产生空值
问题描述
如果我在模板中使用这样的角度组件:
<my-cmp selectable />
我的组件在其构造函数中询问以下内容:
constructor(@Attribute("selectable") selectable: string){};
然后selectable
将是一个空字符串,正如预期的那样,但是当它像这样使用时:
<my-cmp [attr.selectable]="true" />
这会将属性正确放置到 DOM 中的我的标签中,并产生以下结果:
<my-cmp selectable="true" />
但在这种情况下,selectable
将始终有一个null
值,无论它是 onconstruct
还是 onngOnInit
以及它的给定值(例如false
,“”或其他任何东西也会导致null
)。
这里的问题是:为什么?更重要的是:如何以最好的方式在角度使用布尔属性?
注意:在这种情况下,我明确不想使用属性绑定,给定的“输入”应该是静态的。
解决方案
您可以在此处了解有关 @Attribute 装饰器的内部结构:
Angular 不会在运行时读取属性值,只在编译时读取,否则我们会受到性能影响。
使用<my-cmp [attr.selectable]="true" />
语法,您正在创建一个绑定。但属性值将在第一个变化检测周期后设置。所以在编译时你不会设置属性,所以你会得到一个null
值。
推荐阅读
- java - Spring JPA HashSet 只返回一个值
- python - 如何在odoo中通过python代码生成的报告中显示公司徽标
- python - 将两个数据框绘制成 1 个图形
- vba - 通过 Texbox 过滤子表单
- php - 我在一个 Laravel 项目中。我在 Http/Controller 创建了一个 PagesController。我试图在此页面和 routes/web.php 之间创建一个链接
- javascript - 如何使用jsdoc声明返回值包含哪些属性?
- azure - 在为 azure AD 生成令牌时如何在 api 中传递范围
- python - 在 Python 中的每一行代码之后检查条件
- java - 我如何将任何社交媒体应用加入我的应用,而不仅仅是电子邮件
- php - PHP使用appkey解密加密的sek