我正在创建一个Angular2项目,但复选框的双向绑定有问题。
我有一个名为listItem和List的类:
export class ListItem {
public count: number;
public value: string;
public checked: boolean;
constructor(count: number, value: string, checked: boolean) {
this.count = count;
this.value = value;
this.checked = checked;
}
}
export class MyList{
public category: string;
public listItem : ListItem [];
constructor(category: string, listItem : ListItem []) {
this.category = category;
this.listItem = listItem ;
}
}
我正在从Azure search调用列表,该列表工作正常。问题是当我只是将值设置为复选框时。
<div *ngFor="let list of myList; let listIndex = index;">
<div *ngFor="let item of list.listItems; let itemIndex = index;">
<input type="checkbox" [name]="list.category + item.value"
(change)="item.checked = !item.checked"
[ngModel]="item.checked" />
</div
</div>
但该值在单击时也始终为false。我试图使用[(ngModel)],但也不起作用。我还尝试创建一个函数:
(change)="oncheck(listIndex, itemIndex)"
oncheck(listIndex: number, itemIndex: number) {
this.myList[listIndex].listItems[itemIndex].checked =
!this.myList[listIndex].listItems[itemIndex].checked;
}
但我收到了这个错误:
无法分配给对象“[object]”的只读属性“checked”
为什么会这样,如何解决?谢谢你们
可以使用material2 md checkbox指令创建样式化元素。在我看来,这并不是真正的双向绑定,它只是单向绑定在两个方向上的组合(模板-数据源和数据源-模板)
更新:我创建了一个小型plnkr来重现您的情况:http://plnkr.co/edit/cr7TokiqSaBGli7mgCBM
@Component({
selector: 'my-app',
template: `
<div *ngFor="let element of elements; let i = index;">
<span>Val: {{element}}</span>
<input type="checkbox"
[checked]="element" (change)="handleChange(element, i)">
</div>
`,
})
export class App {
elements= [
false,
true,
false,
]:
handleChange(val: boolean, index: number){
console.log("Index: "+index);
console.log("Val: "+val);
this.elements[index] = !val;
}
列表中的元素已正确呈现,但在某些情况下,更改事件将修改元素数组中不正确位置的值。我待会再看一看
更新:重构plnkr
请检查:http://plnkr.co/edit/Ich0g5kzSiQINZjh3VYo
我对你发给我的plnkr做了一些修改。
我将迭代变量从const改为let(考虑到它们的值在循环执行期间不是常量)。
正如我前面提到的,很可能有两种可能性:中的类。T以错误的方式传输到。js(类成员在默认情况下设置为只读),或者手动将值映射到类实例的方式有问题。
问题内容: 我是Angular2的新手,但有一个小问题: 在我的Login-Component-HTML中,我有两个复选框,我想通过两种方式将数据绑定到Login-Component-TypeScript。 这是HTML: 这是Component.ts: 如果单击复选框,则会在控制器(组件)中获得正确的值。 但是,如果我更改了例如组件中的值,则复选框不会“获取”新值。 因此,我无法操作Compon
我对Angular2还很陌生,我有一个小问题: 在我的Login-Component-HTML中,我有两个复选框,我希望以两种方式将它们绑定到login-component-typescript数据绑定。 这是HTML: 这是组件.ts: 如果我单击一个复选框,我会在控制器(组件)中获得正确的值。 但是如果更改组件中例如的值,则复选框不会“获取”新值。 因此我无法操作组件中的复选框(就像我想在组件
函数如下所示: 这里的重点是在任何时候都必须有一个主要项目。但是,当我选择主项并取消选中它时,函数工作得很好,保持,但是复选框仍然未选中。 我读了这篇文章和更多的文章,但没有找到一些看起来像我的案子的东西,也没有找到答案的线索。正如我对双向数据绑定的理解,当我单击复选框时,它将我的的值更改为false。但随后调用并将其设置为true。为什么复选框没有被选中?
Mpx针对表单组件提供了wx:model双向绑定指令,类似于v-model,该指令是一个语法糖指令,监听了组件抛出的输入事件并对绑定的数据进行更新,默认情况下会监听表单组件的input事件,并将event.detail.value中的数据更新到组件的value属性上。 简单实用示例如下: <view> <input type="text" wx:model="{{message}}"> <
双向绑定这个概念在angular出现的时候,就作为王牌概念. 现在几乎是个js前端框架,就有这个功能. 它的概念是: 某个变量, 如果展现在页面上的话: 如果在代码层面进行修改, 那么页面的值就会发生变化 如果在页面进行修改(例如在input标签中), 那么代码的值就会发生变化. 一个演示例子. 在我们的项目中,增加一个 vue页面: src/components/TwoWayBinding.vu
单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。 有单向绑定,就有双向绑定。如果用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。 什么情况下用户可以更新View呢?填写表单就是一个最直接的例子。当用户填写表单时,View的状态就被更新了,如果此时MVVM框架可以自动更新Model的状态,那就相当于我