Краткий ответ : при использовании ngIf без скобок - вы оцениваете строку.
и поскольку любая строка, отличная от пустой строки, принимает значение true, элемент отображается.
Длинный ответ :
Когда вы помещаете *ngIf="boolean"
в элемент, скажем, div, то это точно так же, как это:
<ng-template [ngIf]="boolean">
<div> ... </div>
</ng-template>
Пока все хорошо, вы, возможно, уже читали это из угловой документации .
Как ни странно, вы не хотели приукрашивать его и сразу пошли к использованию 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
надеюсь, это прояснит ситуацию