也许我做错了,所以请告诉我......
我有几个使用一个 Controller 的 View ,我们将其称为页面 Controller 。
在 View 内,我有一堆输入/选择/文本区域元素。当它们发生变化时,我想在 Controller 范围内执行一个函数。现在,我知道我可以将 ng-change 属性应用于每个输入,但我们正在谈论......许多输入。
在我还没 Angular 日子里,我只会做类似的事情
$("#pageOne 输入").on("更改", function(){
父作用域函数();
});
我一直在努力获得
$scope.$watch()
工作,但我似乎无法让它工作...这是我想要实现的一些代码示例。
我觉得我缺少一些关于 $watch
工作原理的信息。在我的实际应用程序中,该设备服务是与 Web 套接字的连接。但我对这个问题进行了简化。
最佳答案
您的问题是由于对物体进行的浅层观察造成的。除非您使用监视函数中的第三个参数将其设置为深度监视,否则它不会跟踪对象属性的任何更改。仅当两个对象(引用)不同时,监视迭代器函数才会运行,这在您的情况下不会发生,因为它只是属性更改。
$scope.$watch(function () {
return $scope.Device.stageDevice;
}, function (n, o) {
console.log("Device changed", n, o); // This never seems to happen.
}, true); //<-- here
但是您确实不需要添加监视,而是可以使用 ng-change 并绑定(bind)到作用域上的函数。
示例:-
$scope.deviceChange = function(){
console.log("Device changed", $scope.Device.stageDevice);
}
和
<input class="form-control" ng-model="Device.stageDevice.name"
ng-change="deviceChange()"/>
<textarea class="form-control" ng-model="Device.stageDevice.desc"
ng-change="deviceChange()"></textarea>
关于javascript - 将 ngChange 附加到所有输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361729/