javascript - 将 ngChange 附加到所有输入?

标签 javascript angularjs

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

我有几个使用一个 Controller 的 View ,我们将其称为页面 Controller 。

在 View 内,我有一堆输入/选择/文本区域元素。当它们发生变化时,我想在 Controller 范围内执行一个函数。现在,我知道我可以将 ng-change 属性应用于每个输入,但我们正在谈论......许多输入。

在我还没 Angular 日子里,我只会做类似的事情

$("#pageOne 输入").on("更改", function(){ 父作用域函数(); });

我一直在努力获得 $scope.$watch() 工作,但我似乎无法让它工作...这是我想要实现的一些代码示例。

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

https://jsfiddle.net/t1pcgkux/5/

最佳答案

您的问题是由于对物体进行的浅层观察造成的。除非您使用监视函数中的第三个参数将其设置为深度监视,否则它不会跟踪对象属性的任何更改。仅当两个对象(引用)不同时,监视迭代器函数才会运行,这在您的情况下不会发生,因为它只是属性更改。

        $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>

<强> Both examples Demo

关于javascript - 将 ngChange 附加到所有输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361729/

相关文章:

javascript - 文件选择器对话框阻止 Internet Explorer 中的脚本

javascript - 删除除字母数字和空格之外的所有内容

AngularJS 测试 : Jasmine mock callback

angularjs - 如何将 Escape 上的输入字段重置为以前的值

javascript - Jquery 事件无法与 AngularJS 一起正常工作

javascript - jquery: $ 未定义

javascript - 如何从ajaxError获取ajax持续时间

javascript - 运行 ajax 需要什么 - 将 jquery 添加到页面会处理 ajax 调用吗?

angularjs - 如何在 angularjs 中实现导航栏

javascript - 从 angular.js 表单生成 PDF