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...});
}
);