gpt4 book ai didi

Angularjs 监视服务对象

转载 作者:行者123 更新时间:2023-12-04 01:25:41 25 4
gpt4 key购买 nike

为什么我看不到服务中的对象。
我有一个简单的变量工作,但一个对象不起作用。
http://plnkr.co/edit/S4b2g3baS7dwQt3t8XEK?p=preview

var app = angular.module('plunker', []);

app.service('test', ['$http', '$rootScope',
function ($http, $rootScope) {

var data = 0;
var obj = {
"data": 0
};

this.add = function(){
obj.data += 1;
console.log('data:', obj);
};

this.getData = function() { return obj; };

}]);

app.controller('TestController', ['$scope', '$rootScope', '$filter', 'test',
function($scope, $rootScope, $filter, test) {

//test controller
$scope.add = function(){
test.add();
};
$scope.test = test;
$scope.$watch('test.getData()', function(newVal){
console.log('data changes into: ', newVal)
});
}]);

最佳答案

您需要将 true 作为 $watch 函数的最后一个参数传递,以便相等性检查是 angular.equals。否则只检查引用相等性。

$scope.$watch('test.getData()', function(newVal){
console.log('data changes into: ', newVal)
}, true);

重复问题:
$watch an object

编辑

如下所述,该代码包含一个不好的做法——在 $scope 中引用了一个服务。 .没有必要在范围内引用它,因为 $watch还接受一个 getter 函数作为第一个参数。 Clean 解决方案使用此函数返回监视数组,如 answer below 中所示。 .
$scope.$watch(function() { return test.getData(); } ...
要列出完整的解决方案,您还可以使用 $watchCollection而是解决引用相等性检查问题。

关于Angularjs 监视服务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26800783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com