Angular4:当数据绑定触发时,输入上的更改事件不起作用

时间:2017-11-28 16:27:48

标签: angular typescript events attributes

为什么没有角度射击我的(改变)事件???

我有一个包含类别的数组。每个类别都有一个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),但这也不起作用......

4 个答案:

答案 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)

尝试(输入)而不是(更改)对我来说效果很好