为啥将 ngStyle 指令声明到 [] 中?

Posted

技术标签:

【中文标题】为啥将 ngStyle 指令声明到 [] 中?【英文标题】:Why the ngStyle directive is declared into the []?为什么将 ngStyle 指令声明到 [] 中? 【发布时间】:2017-11-11 07:15:25 【问题描述】:

我是 Angular 2 的绝对初学者,我对 ngStyle 指令的正确语法有以下疑问。

我有这个例子(效果很好):

<p [ngStyle]="backgroundColor: getColor()">Server with ID  serverID  is  getServerStatus() </p>

我知道,在这种情况下,ngStyle 指令正在添加类似以下内容:

style="background-color: green;"

在我的 html 段落中。

我的疑问与此语法的正确含义有关。为什么会这样:

[ngStyle]="backgroundColor: getColor()"

而不是

ngStyle="backgroundColor: getColor()"

为什么会进入[...]?究竟是什么意思?

【问题讨论】:

为简单起见:当您使用[directive]="..." 时,它将数据发送到指令。当您使用(directive)="..." 时,该指令向您发送数据。 ngStyle 是一个内置指令,如果你查看documentation,你可以看到它做了什么 【参考方案1】:

Angular 2 有 3 种类型的指令:

    属性指令。 结构性指令。 组件。

ngStyle 是一个属性指令。我们需要传递/分配值的所有属性指令都写在方括号内。 例如,模板语法指南中内置的 NgStyle 指令可以同时更改多个元素样式。

【讨论】:

【参考方案2】:

它叫做property binding。使用括号,编译器会尝试评估表达式。没有它,你只是传递一个字符串。

因此,使用括号,您将传递一个 javascript 对象:


    backgroundColor: getColor()

编译器将从组件中调用getColor() 方法以获取正确的颜色。

另一方面,这里离题了,但是如果你想在使用括号时传递一个字符串,你应该用单引号括起来:

<div [property]="'hiii'"></div>

【讨论】:

+1 表示最后一点。如果您不将字符串像“'hill'”这样包装并将其写为“hill”,那么 Angular 将尝试查找变量 hill 而不是将其视为值。

以上是关于为啥将 ngStyle 指令声明到 [] 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 2 中将对象传递给 NgStyle 指令?

ngStyle 与指令上调用函数之间的性能

为啥在 Gradle 中不能将属性声明为输出?

为啥在页面渲染过程中会多次调用 [ngStyle]?

在 web.xml 中声明 JSP taglib 指令

为啥 main() 不能在 C 中声明为静态的?