我正在尝试将Angular 1应用程序转换为Angular 2.通过锯齿状的布尔数组循环(boolean[][]).我正在checkboxes使用以下代码进行渲染:
<div *ngFor="#cell of CellData; #parentIndex = index">
<input *ngFor="#col of cell; #childIndex = index" type="checkbox" [(ngModel)]="CellData[parentIndex][childIndex]" />
</div>
Run Code Online (Sandbox Code Playgroud)
复选框显示正确,但是,如果我选中一个复选框,也会选中右侧的复选框.
这个逻辑在Angular 1应用程序中工作正常,所以我不确定这是否与我使用ngModel的方式或Angular 2的问题有关.
任何帮助将非常感激
我有一个要*ngFor在HTML页面上显示的对象列表。现在,用户与UI进行交互并更改原始值之一(布尔值,从false变为true)。
根据我的理解,*ngFor仅当列表对象被完全修改(即删除并再次添加到列表)时,才会呈现更改。如果我对这个概念是正确的,那么您能否建议一种方法来反映基本类型的更改,而无需重新初始化组件或修改对象引用。
例如:
<div *ngFor="let item of list">
<md-checkbox [(ngModel)]="item.selected"></md-checkbox>
</div>
Run Code Online (Sandbox Code Playgroud)
用户单击该复选框,但是在服务器进行某些验证后必须选中该复选框。因此,假设需要取消选中该复选框,并且用户会在小吃店收到消息。因此,我遍历列表并将其修改item.selected为false。但是,当我在对象项中修改了原始类型selected(boolean)时,更改未反映出来。因此,如何在不重新加载或初始化页面的情况下呈现新值。
如果需要更多输入,请告诉我。
从最近开始,当您没有在每个* ngFor上实现trackBy函数时,Angular styleguide-lint-extender“ Codelyzer”就会发出警告。我想知道为什么这完全是个问题。
trackByFn(index, item) { return index;} // or item.id。如果我从索引切换到item.id,这如何使我的应用程序更快?对于数组插入或删除,索引是最重要的事情。为什么[ngFor]指令应该比较对象标识值呢?_trackByFn。因此,我假设return index-trackBy仍然是默认配置?那么,为什么明确实施它被认为是一个好习惯呢?现在个人而言,我的应用程序中确实有一个大集合(数组),它位于redux存储中。只能用空数组替换它,也可以添加新项目,例如:
return {...state, myArray: [...state.myArray, ...newItems]}),
但从未移动或删除。我item.id代替它跟踪是否有意义index?我真的应该return index;在每个带有* ngFor的组件中实现-function吗?