为啥内置属性指令用方括号括起来?

Posted

技术标签:

【中文标题】为啥内置属性指令用方括号括起来?【英文标题】:Why are built-in attribute directives surrounded by square brackets?为什么内置属性指令用方括号括起来? 【发布时间】:2020-07-02 23:46:26 【问题描述】:

为什么我们需要为内置的 Angular 指令使用方括号,例如 ngClass、ngStyle?

例子:

<some-element [ngClass]="'first second'">...</some-element>

为什么不使用下面的类似代码?

<some-element ngClass="'first second'">...</some-element>

【问题讨论】:

【参考方案1】:

所有内置指令,无论是属性还是结构,都用方括号表示。 *ngFor*ngIf[ngForOf][ngIf] 的语法糖(或 shorthand syntax)。见here。

为什么是方括号?因为内置指令使用@Input 装饰器将数据绑定到它们(例如:ngIfngClass)。如之前所知,data are bound 到 @Input 属性使用方括号。

【讨论】:

【参考方案2】:

在模板语法上检查这个good answer。 您还将在Angular official docs中检索更多详细信息

用你的例子,你可以简单地做:

<some-element class="first second">...</some-element>

因为在这个例子中,你没有使用ngClass 指令的特性。在这种情况下,只需通过 html 属性设置常规的class

但是要调用 Angular 指令,您应该使用方括号。 那么在这种情况下:

<some-element [ngClass]="'first': isFirst, 'second': isSecond"></someElement>

如果本地属性isFirsttrueNgClass 指令会将first 类名添加到some-element,对于second 也是如此。

每个指令都有一个 selector 供 Angular 模板编译器调用。 对于NgClass,选择器为[ngClass]

源代码摘录:

@Directive(selector: '[ngClass]')
export class NgClass implements DoCheck  
...

查看这些资源的更多详细信息: - Angular directives - Angular code for NgClass

【讨论】:

以上是关于为啥内置属性指令用方括号括起来?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Batch 中,为啥用括号括起来的 for 循环不会扩展它被告知要回显的变量?

为啥在打字稿中用方括号括起来的名称声明方法?

为啥将 C 代码块用花括号括起来?

python程序括号为啥变绿

为啥用括号括住分配给变量的 JSX 是最佳实践?

C# Regex.Split,如何将字符串拆分为用括号括起来而不是用括号括起来?