angular - Angular *ngFor 由一个单一的结构指令组成?还是两个?
问题描述
当我在回答另一个问题时,我看到了一本书的屏幕截图,其中指出*ngFor
(语法糖版本)由两个结构指令组成。
这是书中显示的代码:
<ul>
<li *ngFor="let book of books">
{{book.title}}
</li>
</ul>
因此,当Angular 指南声明“结构指令易于识别。星号 (*) 位于指令属性名称之前......”时,它要么是错误的。或者书错了。因为我在那里只看到一个星号。
所以我开始研究 Angular 的 ngFor 文档。我发现了这个:
从这个截图来看,这本书的作者似乎是对的,[ngFor]
而且[ngForOf]
都是(结构)指令。
所以现在我正在考虑这种情况。也许它就像两个(结构)指令:
- 第一个负责复制整个 HTML 元素并放置在 ng-template 标记内(因为在 Angular 中,每个元素只能使用一个结构指令)
- 第二个负责将 ng-template 中的元素复制到需要迭代的次数,并使用所需的数据对元素进行水合
解决方案
Angular文档明确指出只能使用一个结构指令:
您只能将一个结构指令应用于一个元素
理解属性指令和结构指令之间的区别也可能会有所帮助:
结构指令通过添加/删除 DOM 元素来改变 DOM 布局,而属性指令只改变元素的外观或行为。
结构指令改变视图的结构,而属性指令用作元素的属性。
结构指令在
*
like之后使用,*ngIf
或者*ngFor
while 指令只使用正常的属性语法,如下所示ngStyle
:
因此,为了回答您的问题,代码片段使用了一个结构指令。不知道作者为什么说两个,但根据经验,如果两个来源发生冲突,那么官方文档很可能是正确的。
更多信息:
推荐阅读
- javascript - 从 tinymce 发布数据时,它不使用 Codeigniter 存储数据库
- node.js - 在 Heroku 上 WaitForSelector 超时
- javascript - cloudflare js worker 允许国家列表并阻止其余国家
- mysql - 比较两个不同表中的两列值,并根据 24h 周期计算差异
- excel - 如何检查范围是否包含单词?
- android - 服务器响应失败
- sql - 我的 JOIN 操作中的语法错误是否有快速修复
- google-sheets - 如何将特定值更改为范围
- firebase - 有没有办法在 oncreate 中获取 firebaesevisionimagelabel 数据?
- javascript - 禁用自动放大数据