角“ ngif”在获取未定义的值时不起作用

时间:2018-10-09 11:17:37

标签: angular typescript

如果我的数组没有某些值或html中未定义某些值,我想这样做,只是不要尝试从数组中获取它。

  

空数组:[{0:未定义}]

完整数组:

[
{0: "Name"},  
{1: "img.src"},  
{2: name: string,  family: string, age: number} 
]

0:“名称”,1:“ img.src” 2 {名称:字符串,族:字符串;年龄:数字}

我的尝试无效:

   <div *ngFor="let fam of familyArray" class="grid-item">
        <button ion-button>
          <img *ngIf="fam[1] != undefined && fam[1] != null "  class="selectImg" src="{{fam[1]}}" alt="">
        </button>
        <span *ngIf="fam[2].name != undefined && family[2].age != undefined  && family[2].age != null && family[2].name != null " class="image-text">{{fam[2].name}}, {{family[2].age}}m.</span>
        <p *ngIf="fam[2].family != undefined  && fam[2].family != null "  class="family-status">{{fam[2].family}}</p>
      </div>

我总是会收到此错误:

  

TypeError:无法读取未定义的属性“ 1”

  

TypeError:无法读取未定义的属性“名称”

4 个答案:

答案 0 :(得分:3)

您不需要对undefined和null进行检查,它会自动检查undefined和null,您只需指定如下所示:

      <div *ngFor="let fam of familyArray" class="grid-item" >
        <button *ngIf="fam[0]" ion-button>
          <img *ngIf="fam[1]"  class="selectImg" src="{{fam[1]}}" alt="">
        </button>
        <span *ngIf="fam[2] && fam[2].name && family[2].age" class="image-text">{{fam[2].name}}, {{family[2].age}}m.</span>
        <p *ngIf="fam[2].family"  class="family-status">{{fam[2].family}}</p>
      </div>

您接收到的对象数组实际上是错误的格式,所有对象都应为相同的类型,但是需要遵循一些标准约定。

答案 1 :(得分:1)

   <div *ngFor="let fam of familyArray" class="grid-item">
    <button ion-button>
      <img *ngIf="fam['1'] != undefined && fam['1'] != null "  class="selectImg" src="{{fam['1']}}" alt="">
    </button>
    <span *ngIf="fam['2'].name != undefined && family['2'].age != undefined  && family['2'].age != null && family['2'].name != null " class="image-text">{{fam['2'].name}}, {{family['2'].age}}m.</span>
    <p *ngIf="fam['2'].family != undefined  && fam['2'].family != null "  class="family-status">{{fam['2'].family}}</p>
  </div>

上面的代码3次,因为数组中有3个对象。 fam的首次值为{0: Name}, 第二次{1: img.src},
第三次{2: name: Example, family: example, age:15}

没有这样的对象fam [1] 我希望我已经解释清楚了。

答案 2 :(得分:0)

通过以下操作解决了该问题:

HTML(在按钮上添加了ngIf ):

Map<String, Boolean> library= new HashMap<>();
    library.put("Book1",true);
    library.put("Book2",true);
    library.put("Book3",false);
    library.forEach((key, value) -> {
        if(value){
            System.out.println("Book = " + value);
        }
    });

并确保我的数组为空,而不是0:如果不存在,则为未定义。

答案 3 :(得分:0)

您已经添加了针对undefined和null的其他检查,并在几个地方错过了检查。

这是您的示例的工作副本- https://stackblitz.com/edit/angular-e8zjsq