为什么没有角度射击我的(改变)事件???
我有一个包含类别的数组。每个类别都有一个id,name,clean_name和checked(boolean)字段。所有类别都显示在带有复选框的树视图中。复选框看起来像这样:
<input class="categoryBox" type="checkbox" name="category"
[value]="item['value']"
[id]="item['clean_category_name'] + '_' + item['id'] + '_' + componentName"
[checked]="item.checked"
(change)="onCheckboxClick(item)">
因此,当复选框值发生变化时,它应该触发(更改)事件并执行函数onCheckboxClick()。
当我点击复选框时,(更改)事件被触发,一切正常。但是当我通过代码更改数组中的checked值时,它不会被触发(即使由于[checked] =“item.checked”属性绑定而选中了复选框)。这是为什么????角度是否允许我以编程方式触发(更改)?有解决方案吗?
我也试过(ngModelChange),但这也不起作用......
答案 0 :(得分:0)
在通过Property Binding与Attributes交互时,您需要使用[attr.xxx]
语法。您实际上并未更改元素的checked
属性。我很惊讶你没有在控制台中出错。所以在你的情况下,它将是:
<input class="categoryBox" type="checkbox" name="category"
[attr.value]="item['value']"
[attr.id]="item['clean_category_name'] + '_' + item['id'] + '_' + componentName"
[attr.checked]="item.checked"
(change)="onCheckboxClick(item)">
答案 1 :(得分:0)
HTML:
<input type="checkbox" (change)="Check(id,$event)" name="id" value="{{id}}">
component.ts:
Check(value, event)
{ if (event.target.checked)
{ this.checked.push(value); }
else if (!event.target.checked)
{ let indexx = this.checked.indexOf(value);
this.checked.splice(indexx, 1);}
}
我在我的项目中做了这件事。
Check()函数获取复选框值,该值是我想要的用户ID,然后将其推入数组,我使用该数组对其执行操作。
答案 2 :(得分:0)
我不知道这是否是问题的解决方案,但我不认为角度4能够做我想做的事情。所以我做的是在复选框输入上执行函数dispatchEvent并且它有效!
答案 3 :(得分:0)
尝试(输入)而不是(更改)对我来说效果很好