web-dev-qa-db-ja.com

AngularJsng-changeイベントは手動で発生します

 <input type="checkbox" value="" ng-model="filterPrivateDocCheckBox" ng-click="dl.filterPrivateDocument(filterPrivateDocCheckBox, $event)">
 <input st-search="target" class="input-sm form-control"  ng-model="dl.documentTarget" ng-change="dl.change()" />

function filterPrivateDocument(val) 
{
    if(val)
    this.documentTarget = 'Private';
}

チェックボックスをクリックすると、値をテキストボックスに設定しましたが、ng-changeイベントが発生しないことがわかりました。どうして?

また、テキストボックスに値を入力すると、ng-changeイベントが発生することがわかります。

この問題の修正はありますか?

5
shreyansh

ドキュメント によると:

NgChange式は、入力値の変更によって新しい値がモデルにコミットされた場合にのみ評価されます。

評価されません:

  • $ parsers変換パイプラインから返された値が変更されていない場合
  • モデルがnullのままであるため、入力が引き続き無効である場合
  • モデルが入力値の変更ではなくプログラムで変更された場合

そのため、JavaScript(/ angular)によって変更されてもトリガーされません。

あなたができることは、自分で変更機能をトリガーすることです。

function filterPrivateDocument(val) {
    if(val) {
        this.documentTarget = 'Private';
        this.change();
    }
}

this jsfiddle を参照してください

10
devqon