Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ng if内的元件上设置监视_Javascript_Angularjs - Fatal编程技术网

Javascript 在ng if内的元件上设置监视

Javascript 在ng if内的元件上设置监视,javascript,angularjs,Javascript,Angularjs,假设我有以下观点: <div ng-if='some === "something"'> <input type="text" ng-model="foo.Bar"/> </div> 如果输入在带有ng的div中,则手表不工作 为什么??我能让它工作吗?您必须在控制器内创建foo的空对象 foo.controller('fooFoo', function fooFoo($scope) { $scope.foo = {};

假设我有以下观点:

<div ng-if='some === "something"'>
   <input type="text" ng-model="foo.Bar"/>
</div>
如果输入在带有
ng的div中,则
手表不工作


为什么??我能让它工作吗?

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

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

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

使用ng更改(HTML):


input
元素上使用
ng change
,而不是在controller中使用
$watch

我认为如果创建自己的作用域,问题在于ng。然后我们有foooo作用域(父)和ng if作用域

foo.controller('fooFoo',
   function fooFoo($scope) {
      $scope.foo = {};
      $scope.some = "something";
      $scope.$watch('foo.Bar',function (nVal, oVal) { etc...});
   }
);
由于继承,第一次使用的属性
foo.Bar
(page init)在作用域和指向同一位置(foooo控制器中的foo.Bar属性)中都可用。但是,在更改输入元素(在ng if作用域中)后,ng if作用域中的
foo.Bar
指向其自身的作用域属性,因此fooFoo控制器中的
foo.Bar
不会被更改

如果你用controllerAs,我想它会解决的

大概是这样的:

<div ng-controller="fooFoo as ff">
    <div ng-if='ff.some === "something"'>
       <input type="text" ng-model="ff.foo.Bar"/>
    </div>
</div>

在你的范围内,
foo
在哪里?老实说,我省略了一些细节。Foo对象是在表单加载时创建的,但在从服务器检索某些数据后执行的回调函数中。这对我来说仍然有点模糊,因为如果我不使用ng if指令,这个解决方案会起作用,但声明对象(这里是$scope.foo={})会有所帮助。谢谢你给我零钱。我不知道它更好,甚至不知道它是否存在,但它还有一个优势——当foo未声明时,它抛出异常,而$watch没有。谢谢你的帮助,纳赛尔。
foo.controller('fooFoo',
   function fooFoo($scope) {
      $scope.some = "something";

      $scope.onChange = function(){
          console.log($scope.foo.Bar);
     };
   }
);
<div ng-controller="fooFoo as ff">
    <div ng-if='ff.some === "something"'>
       <input type="text" ng-model="ff.foo.Bar"/>
    </div>
</div>
foo.controller('fooFoo',
   function fooFoo($scope) {
      var ff = this;
      ff.some = "something";
      $scope.$watch('ff.foo.Bar',function (nVal, oVal) { etc...});
   }
);