11

モデルがプログラムで変更されたときに角度の ng-change が呼び出されると、問題が発生します。

$scope.sendMessage = function() {
    $scope.message = "Message sent";
}

$scope.confirmed = true;
$scope.mySelectBox = $scope.selects[1];

<select ng-model="mySelectBox"
        ng-options="item.name for item in selects track by item.name"
        ng-change="sendMessage()">
</select>

コード例は次のとおりです: http://plnkr.co/edit/R4MO86ihMrauHXhpCMxi?p=preview

メッセージはsendMessage呼び出されないため、null にする必要があります。モデルはプログラムで変更されます。

4

4 に答える 4

16

ngModelOptionsで試すことができます。このプランカーを参照してくださいhttp://plnkr.co/edit/BdKx62RW5Ls2Iz1H3VR1?p=preview .

私の例では使用ng-model-options="{ updateOn: 'change', debounce: { change: 0 } }"しましたが、うまくいくようです。選択を変更すると、ngChange で提供される機能のみが実行されます。初期化フェーズmessageでは空のままです。

于 2015-06-15T13:53:09.733 に答える
4

ng-change コールバックは、モデルが変更されるたびに変更され、初期設定をそのような変更として扱います。あなたがやりたいことは、ユーザーが操作した後にのみ目的のコードを実行することです。フィールドの$touchedプロパティを確認できます。

<form name="exampleForm" ng-controller="ExampleController">
  <select ng-model="mySelectBox" name="mySelectBox"
          ng-options="item.name for item in selects track by item.name"
          ng-change="sendMessage()">
  </select>
  <p>message = {{message}}</p>
</form>


$scope.sendMessage = function() {
    if ($scope.exampleForm.mySelectBox.$touched) {
        $scope.message = "Message sent";
    }
}
于 2015-06-15T13:38:09.137 に答える
0

コントローラーでモデルに値を提供しているため、リストと一致するモデルの値を設定するたびに、ng-change が呼び出されます。

更新されたプランカーを参照してください: http://plnkr.co/edit/f3xGmKesLFbzti56WLyH?p=preview

于 2015-06-15T13:35:58.140 に答える