angularjs – 如何$watch多个变量的变化
发布时间:2020-12-17 09:06:30 所属栏目:安全 来源:网络整理
导读:参见英文答案 Watch multiple $scope attributes10个答案如何$ scope。$在Angular中观察多个变量,并且当其中一个更改时触发回调。 $scope.name = ...$scope.age = ...$scope.$watch('???',function(){ //called when name or age changed}) 更新 Angular现
参见英文答案 >
Watch multiple $scope attributes10个答案如何$ scope。$在Angular中观察多个变量,并且当其中一个更改时触发回调。
$scope.name = ... $scope.age = ... $scope.$watch('???',function(){ //called when name or age changed })
更新
Angular现在提供了两个范围方法$watchGroup(自1.3版本)和$watchCollection.这些被@blazemonger和@kargold提及。 这应该独立于类型和值: $scope.$watch('[age,name]',function () { ... },true); 在这种情况下,必须将第三个参数设置为true。 字符串连接’年龄名称’将失败在这样的情况下: <button ng-init="age=42;name='foo'" ng-click="age=4;name='2foo'">click</button> 在用户单击按钮之前,观看的值将是42foo(42 foo),然后单击42foo(4 2foo)。所以watch函数不会被调用。所以更好地使用数组表达式,如果你不能确保,这样的情况不会出现。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css" rel="stylesheet" /> <script src="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script> <script src="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script> <script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script> <script src="http://code.angularjs.org/1.2.0-rc.2/angular-mocks.js"></script> <script> angular.module('demo',[]).controller('MainCtrl',function ($scope) { $scope.firstWatchFunctionCounter = 0; $scope.secondWatchFunctionCounter = 0; $scope.$watch('[age,function () { $scope.firstWatchFunctionCounter++; },true); $scope.$watch('age + name',function () { $scope.secondWatchFunctionCounter++; }); }); describe('Demo module',function () { beforeEach(module('demo')); describe('MainCtrl',function () { it('watch function should increment a counter',inject(function ($controller,$rootScope) { var scope = $rootScope.$new(); scope.age = 42; scope.name = 'foo'; var ctrl = $controller('MainCtrl',{ '$scope': scope }); scope.$digest(); expect(scope.firstWatchFunctionCounter).toBe(1); expect(scope.secondWatchFunctionCounter).toBe(1); scope.age = 4; scope.name = '2foo'; scope.$digest(); expect(scope.firstWatchFunctionCounter).toBe(2); expect(scope.secondWatchFunctionCounter).toBe(2); // This will fail! })); }); }); (function () { var jasmineEnv = jasmine.getEnv(); var htmlReporter = new jasmine.HtmlReporter(); jasmineEnv.addReporter(htmlReporter); jasmineEnv.specFilter = function (spec) { return htmlReporter.specFilter(spec); }; var currentWindowOnload = window.onload; window.onload = function() { if (currentWindowOnload) { currentWindowOnload(); } execJasmine(); }; function execJasmine() { jasmineEnv.execute(); } })(); </script> </head> <body></body> </html> http://plnkr.co/edit/2DwCOftQTltWFbEDiDlA?p=preview PS: 如@reblace在注释中所述,当然可以访问这些值: $scope.$watch('[age,function (newValue,oldValue) { var newAge = newValue[0]; var newName = newValue[1]; var oldAge = oldValue[0]; var oldName = oldValue[1]; },true); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |