Angularjs 将服务中的数据更改传播到控制器

Angularjs 将服务中的数据更改传播到控制器,angularjs,angularjs-service,Angularjs,Angularjs Service,我有一个用于存储一些应用程序公共数据的服务。此服务还可以修改此数据并对事件作出反应。但是,我在将更改传播到使用此服务的控制器时遇到问题 我已经看到了这个和这个,但是解决方案对我不起作用 我创建了一个模型来说明我的核心问题。有一个服务对象将公共数据存储在共享对象中。它有一个函数updateObject,可以更新数据(在我的real app中,它向服务器发送请求)。该服务由主控制器使用。但是,当在服务中调用updateObject时,控制器中的数据不会更新 为什么呢?这也是最佳实践还是我做错了什么

我有一个用于存储一些应用程序公共数据的服务。此服务还可以修改此数据并对事件作出反应。但是,我在将更改传播到使用此服务的控制器时遇到问题

我已经看到了这个和这个,但是解决方案对我不起作用

我创建了一个模型来说明我的核心问题。有一个服务
对象
将公共数据存储在
共享对象
中。它有一个函数
updateObject
,可以更新数据(在我的real app中,它向服务器发送请求)。该服务由主控制器使用。但是,当在服务中调用
updateObject
时,控制器中的数据不会更新

为什么呢?这也是最佳实践还是我做错了什么

代码如下:

app=angular.module('app',[]);
app.factory('object',['$timeout',function($timeout){
var sharedObject={attr1:'',attr2:''};
var updateObject=function(){
$timeout(函数(){
sharedObject={attr1:'新值',attr2:'更新值'};
console.log('updated');
}, 1000);
}
updateObject();
返回共享对象;
}]);
应用控制器('main'[
“$scope”,“object”,函数($scope,object){
$scope.$watch(函数(){return object},函数(obj){
控制台日志(obj);
$scope.object1=obj;
},对);
}
]);

问题在于超时回调不会更新您正在监视的对象。它用另一个对象替换它。因此,观察者仍然可以看到未经修改的旧对象

将代码(如中)替换为


您将在页面中看到值的变化。

问题在于,您在更新方法中将
sharedObject
最初指向的对象替换为另一个对象。 控制器仍将保留对旧对象的引用

您需要做的是就地更新
sharedObject
。查看我的更新

基本上,您需要在更新方法中执行类似的操作

 sharedObject.attr1= 'new value';
 sharedObject.attr2= 'update value';

除了plunker,请在这里发布代码。谢谢!然而,有没有一种方法可以在一次任务中完成这一任务?例如,如果我在这个对象上有十几个属性,我不想为每个属性都写这一行。将实际对象(
sharedObject
)包装起来,将这十几个字段放入另一个(
wasted
)中,其中包含这个对象作为唯一属性。永远不要替换被监视的
对象,而是将另一个对象分配给被监视的
对象。
 sharedObject.attr1= 'new value';
 sharedObject.attr2= 'update value';