Angular 2 - 具有* ngIf的局部变量/模板引用变量 - 仅限数组的第一个元素不绑定

时间:2017-02-16 00:14:47

标签: angular angular2-template

此处有采访者:https://plnkr.co/edit/te67zdtkVkNCUzEtW5XO?p=preview 看app.ts

背景

父组件有一个数组,并在数组中显示一个元素。 ChildComponent是一个显示数组的列表,其中包含在单击元素时设置的变量selectedIdx

selectNumber(idx: number) {
    this.selectedIdx = idx;
  }

ParentComponent通过将子项存储为局部变量selectedIdx并使用#child访问它来从子项中获取child.selectedIdx值。

问题:

子组件中的selectedIdx与访问它的父组件之间的绑定对于数组中除第一个元素(索引0)之外的每个元素都是完美的 - 如果单击1,则元素在索引0处,Selected Number In Parent: _消失。

这意味着*ngIf为false,表示selectedIdxnull

然而,情况并非如此,因为当我在子组件的selectNumber()函数中设置断点时,this.selectedIdx被设置为0.父检索必须有一些古怪的事情发生值为0,然后认为它为空?

任何帮助表示感谢,非常感谢。

基于:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-local-var

1 个答案:

答案 0 :(得分:3)

这是因为在package application; import javafx.scene.image.Image; import javafx.scene.image.ImageView; public class ImageLoader { protected ImageView wareHouseImage; private Object diamondImage; private Object wallImage; private Object mapImage; private Object crateImage; public ImageLoader(ImageView wareHouseImage) { this.wareHouseImage = showWareHouseImage(); } public ImageView getWareHouseImage() { return wareHouseImage; } public void setWareHouseImage(Image wareHouseImage) { this.wareHouseImage = showWareHouseImage(); } public static ImageView showWareHouseImage() { ImageView wareHouse = new ImageView(); wareHouse.setFitHeight(45); wareHouse.setFitWidth(45); Image wareHouseImage = new Image("application/warehouse.png"); wareHouse.setImage(wareHouseImage); return wareHouse; } public Object getDiamondImage() { return diamondImage; } public void setDiamondImage(Object diamondImage) { this.diamondImage = diamondImage; } public Object getWallImage() { return wallImage; } public void setWallImage(Object wallImage) { this.wallImage = wallImage; } public Object getMapImage() { return mapImage; } public void setMapImage(Object mapImage) { this.mapImage = mapImage; } public Object getCrateImage() { return crateImage; } public void setCrateImage(Object crateImage) { this.crateImage = crateImage; } 0 == Javascript中,所以当您与0进行比较时,false表达式会返回*ngIf

将其更改为:

false

This answer有一个很好的表格。