首页 文章

Angular 4正确使用嵌套* ngFor

提问于
浏览
1

我正在实施更新Web服务 . 为此,我从数据库中获取数据并用它填充表单字段 . 然后,用户需要编辑数据并提交以更新数据库 .

我需要帮助实现这个复选框 . 我试图使用嵌套的* ngFor来获取2个不同的Web服务 . “maintainanceTypeList”包含所有复选框选项,“defaultmaintainance”包含用户提交创建表单时检查的选项 . 正如您所看到的,我正在尝试比较两者的id,并在比较返回true时选中复选框 .

我的问题是嵌套循环的迭代现在取决于我的defaultmaintainance有多少个对象,这意味着多次显示相同的复选框 .

<label for="maintenancetype"
       class="text-3ab08b text-transform"
       style="margin-right: 1em;">
    Maintenance Type:
</label>
<span *ngFor="let x of maintainanceTypeList">
    <span *ngFor="let y of defaultmaintainance">
        <md-checkbox *ngIf="x.isDeleted == 0" 
                     name="{{x.maintenancetype}}" 
                     [checked]="x._id == y._id"
                     (change)="changeMaintainance($event.checked, x)" 
                     value="{{x.maintenancetype}}">
            {{x.maintenancetype}}
        </md-checkbox>
    </span>
</span>

编辑:两个数组都是具有以下格式的多个对象的对象数组:

isDeleted:"0"
maintenancetype:"Fixed"
status:"1"
_id:"5971da2c958ccd42a9c99f54"

1 回答

  • 2

    我会修改 maintainanceTypeList 为每个项目添加一个附加属性,该属性显示是否应该检查此项目:

    let selectedIds = defaultmaintainance.map(item => item._id);
    
    maintainanceTypeList.forEach(checkbox => {
        checkbox.checked = (selectedIds.indexOf(checkbox._id) > -1) ? true : false;
    })
    

    然后在单个* ngFor循环中显示 maintainanceTypeList

    <span *ngFor="let x of maintainanceTypeList">
        <md-checkbox *ngIf="x.isDeleted == 0" 
                     name="{{x.maintenancetype}}" 
                     [checked]="x.checked"
                     (change)="changeMaintainance($event.checked, x)" 
                     value="{{x.maintenancetype}}">
            {{x.maintenancetype}}
        </md-checkbox>
    </span>
    

相关问题