0

私のアプリケーションでは$watch、何かを行う前にフォームが有効かどうかを確認します。models問題は、使用する前にngForm がコンパイルされないことです。

例: http://plnkr.co/edit/Y7dL67Fn7SaSEkjiFf2q?p=preview

JS

  $scope.results = [];
  $scope.$watch(function() {
    return $scope.testForm.$valid;
  },
    function( valid ) {
      $scope.results.push( valid );
    }
  )

HTML

<ng-form name="testForm" ng-init="test = 1">
  <input ng-model="test" required>
</ng-form>

<p ng-repeat="result in results track by $index" ng-class="{'false': !result, 'true': result}">{{ result }}</p>

結果 :

false // Wrong
true

は 1 に設定されているため、最初はフォームが無効であってはなりません$scope.test

どんな手掛かり ?

4

2 に答える 2

0

正しく理解できているかどうかは定かではありませんが、AngularJS が最初にチェックするのは、

$scope.results = [];

は空であるため、何かをプッシュする前に結果が false と評価されます。

空でない結果から始める場合は、次のように言います。

$scope.results = [1];

最初の評価は本当です。

$watch は適切な方法ではないと思います。あなたの問題は、 $watch の仕組みと Angular のダイジェスト サイクルに関係していると思います。

于 2014-05-21T21:39:47.077 に答える