Javascript 是否将更改附加到所有输入?

Javascript 是否将更改附加到所有输入?,javascript,angularjs,Javascript,Angularjs,也许我做错了,所以请告诉我 我有几个视图使用一个控制器,我们称之为页面控制器 在视图中,我有一堆输入/选择/文本区域元素。当它们改变时,我想在控制器范围内执行一个函数。现在,我知道我可以将ng change属性应用于每个输入,但我们正在讨论。。。许多投入 在我消瘦前的日子里,我会做一些类似的事情 $(“#第一页输入”)。在(“更改”,函数(){ parentScopeFunction(); }); 我一直在试着得到答案 $scope.$watch() 工作,但我似乎无法让它工作。。。下面是一些我

也许我做错了,所以请告诉我

我有几个视图使用一个控制器,我们称之为页面控制器

在视图中,我有一堆输入/选择/文本区域元素。当它们改变时,我想在控制器范围内执行一个函数。现在,我知道我可以将ng change属性应用于每个输入,但我们正在讨论。。。许多投入

在我消瘦前的日子里,我会做一些类似的事情

$(“#第一页输入”)。在(“更改”,函数(){
parentScopeFunction();
});

我一直在试着得到答案
$scope.$watch()
工作,但我似乎无法让它工作。。。下面是一些我试图实现的代码示例

我觉得我遗漏了一些关于
$watch
工作原理的信息。在我的实际应用程序中,该设备服务是与web套接字的连接。但我已经简化了这个问题


您的问题是由于对对象进行了肤浅的观察。除非使用watch函数中的第三个参数为deepwatch设置对象,否则它不会跟踪对象属性的任何更改。仅当两个对象(引用)不同时,Watch iterator函数才会运行,这在您的情况下不会发生,因为这只是属性更改

        $scope.$watch(function () {
            return $scope.Device.stageDevice;
        }, function (n, o) {
            console.log("Device changed", n, o); // This never seems to happen.
        }, true); //<-- here



Hrmm。。。你说得对。我使手表的表达更具体,它的工作。。。但有人会如何使它更有用呢?在一个视图中,假设我有100个输入,它们都有一个单独的
ng模型
,定义了
stageDevice的属性
?我试图避免将
ng change=“update()”
放在每个输入中。我希望有人能够编辑HTML,而不必担心弄乱
ng change
属性。如果您创建的手表越来越多,那么这是不好的,使用ng change实际上利用了ng模型的viewchangeListener,而不是创建手表。所以我会去换衣服啊!我丢失了传递给
objectEquality
观察者的
true
布尔值,就像在您的示例中一样,我的原始代码开始在观察版本上工作。但我会建议我的上级在所有输入上使用ng change.:)@查理,我想我在回答中提到了,哈哈,你也提到了。令人惊叹的!
        $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>