ngIf和@Input angular2奇怪行为

时间:2017-04-21 14:42:24

标签: javascript angular typescript

即使控制台说错,NgIf似乎总是如此。

来自以下组件html

 <product-component-tree itemSku="{{item.itemSku}}" selectable="false" classes="col-md-12 col-xs-12"></product-component-tree>

将selectset设置为false ...

export class ProductComponentTree {
@Input() classes: string;
@Input() itemSku: string;
@Input() selectable: boolean;
ngOnInit() {
    if (this.itemSku)
        this.productDetailService.getComponents(this.itemSku, true).subscribe(x => {
            this.treeData = x;
        });
    console.log(this.selectable); //prints false
}
}

组件的Html tmplate:

<div class="{{classes}}" *ngIf="selectable">
    something
    <p-tree [value]="treeData" layout="horizontal" selectionMode="checkbox" [(selection)]="selectedProducts" (onNodeSelect)="nodeSelect($event)"></p-tree>
</div>
<div class="{{classes}}" *ngIf="!selectable">
    else
    <p-tree [value]="treeData" layout="horizontal" [contextMenu]="productTreeCm" selectionMode="single" [(selection)]="selectedProduct"></p-tree>
    <p-contextMenu #productTreeCm [model]="items"></p-contextMenu>
</div>

总是会在里面显示div!

目标: 让它正常工作并显示其他div如果可选择为假。

1 个答案:

答案 0 :(得分:3)

执行selectable="false"时,将字符串值传递给组件。

而且,正如你所知,“假”是一个真正的价值。 (否则,请看一下:https://dorey.github.io/JavaScript-Equality-Table/

您需要做的是:

<product-component-tree [itemSku]="item.itemSku" [selectable]="false" ...