在ng-if内的元素上设置监视

Lan*_*eyo 5 javascript angularjs

假设我有以下观点:

<div ng-if='some === "something"'>
   <input type="text" ng-model="foo.Bar"/>
</div>
Run Code Online (Sandbox Code Playgroud)

在控制器some中设置:

foo.controller('fooFoo',
   function fooFoo($scope) {
      $scope.some = "something";
      $scope.$watch('foo.Bar',function (nVal, oVal) { etc...});
   }
);
Run Code Online (Sandbox Code Playgroud)

如果输入在div内,ng-ifwatch不起作用.

为什么?我可以以某种方式使它工作?

Nas*_*asi 2

您必须在控制器内创建 foo 的空对象。

foo.controller('fooFoo',
   function fooFoo($scope) {
      $scope.foo = {};
      $scope.some = "something";
      $scope.$watch('foo.Bar',function (nVal, oVal) { etc...});
   }
);
Run Code Online (Sandbox Code Playgroud)

推荐:您可以使用ng-change而不是 $scope.$watch(); 因为 $watch 对于角度应用程序性能来说是一个不好的做法。

使用 ng-change (HTML):

<div ng-if='some === "something"'>
   <input type="text" ng-model="foo.Bar" ng-change="onChange()"/>
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript:

foo.controller('fooFoo',
   function fooFoo($scope) {
      $scope.some = "something";

      $scope.onChange = function(){
          console.log($scope.foo.Bar);
     };
   }
);
Run Code Online (Sandbox Code Playgroud)