如果我们不想将ngIf指令绑定到component字段,为什么要用括号呢?

时间:2018-09-16 19:53:52

标签: angular angular-directive

如果我们不想将属性指令绑定到组件字段,为什么需要括号。

例如以下代码为何不起作用的原因:

<ng-template ngIf=false>
     <h3>Test</h3>
</ng-template>

如果我们使用方括号([ngIf] = false),它可以工作,但是据我所知,当我们要将http标记属性或指令绑定到组件变量时使用方括号

例如ngClass指令在没有括号的情况下工作正常:

<h2 ngClass='myclass'>title</h2>

1 个答案:

答案 0 :(得分:0)

简短答案:使用不带方括号的ngIf时-您将评估字符串。 并且由于除空字符串以外的任何其他字符串的求值结果都为true,因此会显示该元素。

详细答案: 当您将*ngIf="boolean"放在元素上(例如div)时,则与执行此操作完全相同:

<ng-template [ngIf]="boolean">
     <div> ... </div>
</ng-template>

到目前为止,您可以并且很可能已经从angular documentation阅读了此内容。 奇怪的是,您不想加糖,而是直接使用ng-template

现在您要问,如果我实际上拆掉支架,扔掉单向装订,会发生什么情况。并简单地为该ngIf指令设置一个值。

当您在元素上使用其他属性时,发生的确切行为是什么。例如[class]。如果您在元素上使用[class]="text-red"。您将在您的元素上获得一个名为undefined的类。您只是尝试使用未定义的对象作为类名。

因此,如果我们假设此CSS规则有效:

.text-red { color: red }

不使用方括号时,它需要一个字符串。

<div class="text-red"> I AM RED </div>  // text is red

在使用方括号时,它需要一个表达式,请添加撇号来表示字符串。

<div [class]="'text-red'"> I AM RED </div>  // text is red

希望这会使事情更清楚