2017-11-28 13 views
0

なぜ私の(変更)イベントが発生しないのですか?Angular4:データバインディングによってトリガされたときに、入力時にイベントが変化しない

カテゴリがある配列があります。すべてのカテゴリには、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] = "item.checked"属性バインディングのためにチェックされていても、起動されません。何故ですか????プログラム的に私は発射(変更)できますか?解決策はありますか?

あなたがプロパティの結合を介して属性と対話するとき[attr.xxx]構文を使用する必要が

答えて

0

を私はまた、(ngModelChange)で試してみましたが、それはうまくいきませんでしたどちらか...。要素の属性を実際に変更しているわけではありません。私はあなたのコンソールでエラーが発生していないことに驚いています。だからあなたの場合には、それは次のようになります。

<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)">

+0

こんにちは!返信いただきありがとうございます。しかし、私が[attr.id]の[attr.checked]を使用すると、もう動作しません。 idはコードに表示されません。 –

+0

コンポーネントコードを掲載できますか?ビューを動かすロジックにアクセスすることなく伝えることは本当に難しいです。 – joshrathke

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であるcheckboxの値を取得し、それを配列にプッシュし、その配列を使用して操作を実行します。

+0

こんにちは、返信いただきありがとうございます。しかし、私の問題は、(chech)イベントが起動しなくても、Check関数は決して実行されないということです。 –

0

これが問題の解決策であるかどうかはわかりませんが、私はAngular 4が私が望むことをすることができるとは思いません。ですから、私がしたことは、チェックボックスの入力でdispatchEvent関数を実行することでした!

関連する問題