无法在字符串上创建 属性 'selected',将 ngModel 与 Angular 结合使用
Cannot create property 'selected' on string, using ngModel with Angular
所以我尝试像这样使用 [(ngModel)]
:
<div class="items">
<tbody>
<tr *ngFor="let account of this.accounts">
<td>
<input type="checkbox" [(ngModel)]="this.account.name.selected" name="account">
{{account.name}}
</td>
</tr>
</tbody>
</div>
我的accounts
创建并填充组件:accounts: Account[] = [];
我的Account
对象:
export class Account {
name: string;
surname: string;
}
我得到 ERROR TypeError: Cannot create property 'selected' on string 'John'
我看到了这个线程: 但不太明白如何将提到的修复应用到我的案例中,可能是因为我使用的是 Angular 而不是 AngularJS。如果有人能帮助理解这里的问题,我们会很高兴吗?
看来您的数组中需要 selected
属性。所以为了避免污染Account
class,可以使用map
方法:
let withSelectedProperty = this.accounts.map(s=> ({...s, selected: false}));
和HTML:
<tr *ngFor="let account of withSelectedProperty">
<td>
<input type="checkbox" [(ngModel)]="account.selected" name="account">
{{account.name}}
</td>
</tr>
更新:
您可以使用方法 filter
获取所有选定的值:
let onlySelected = this.withSelectedProperty.filter(f => f.selected);
所以我尝试像这样使用 [(ngModel)]
:
<div class="items">
<tbody>
<tr *ngFor="let account of this.accounts">
<td>
<input type="checkbox" [(ngModel)]="this.account.name.selected" name="account">
{{account.name}}
</td>
</tr>
</tbody>
</div>
我的accounts
创建并填充组件:accounts: Account[] = [];
我的Account
对象:
export class Account {
name: string;
surname: string;
}
我得到 ERROR TypeError: Cannot create property 'selected' on string 'John'
我看到了这个线程:
看来您的数组中需要 selected
属性。所以为了避免污染Account
class,可以使用map
方法:
let withSelectedProperty = this.accounts.map(s=> ({...s, selected: false}));
和HTML:
<tr *ngFor="let account of withSelectedProperty">
<td>
<input type="checkbox" [(ngModel)]="account.selected" name="account">
{{account.name}}
</td>
</tr>
更新:
您可以使用方法 filter
获取所有选定的值:
let onlySelected = this.withSelectedProperty.filter(f => f.selected);