我有一个应该可以在许多控制器中访问的对象。
此对象位于服务中,具有默认值,控制器可能会稍后更改这些值。
我的问题是我服务中的对象保持控制器更改值。
当控制器获取对象时,我总是希望它使用默认值的对象。 (不是之前由其他控制器修改的值...)
我在服务中有这个:
this.myObject = {'item1' : 'something', 'item2' : 'other' , .....};
由于this.
所以我尝试制作这样的方法:
this.createMyObject = function() {
var obj = myObject;
return obj;
}
并在我的控制器中调用createMyObject();
,但这也不起作用。
我知道解决方案可能很明显。
感谢。
答案 0 :(得分:1)
如果你想要的是myObject
的副本,你想要做的是:
var obj = angular.copy(myObject);
因为var obj = myObject;
只会复制对象的引用,而不是其内容。
答案 1 :(得分:1)
Object
将按引用传递。所以当你做的时候
this.createMyObject = function() {
var obj = myObject;
return obj;
}
myObject
的引用已分配到obj
因此,obj
中的任何更改也会更新myObject
。
考虑使用angular.extend或angular.copy
this.createMyObject = function() {
var obj = {};
angular.copy(myObject, obj);
// or
// obj = angular.copy(myObject);
return obj;
}
答案 2 :(得分:1)
尝试以下解决方案:
.service('MyService', function() {
var myObject = {
'item1': '',
'items2': ''
};
/**
* Used to return copy of myObject with some default values
*/
this.createMyObject = function() {
return angular.copy(myObject);
};
this.alterMyObject = function() {
// @TODO here myObject can be used to edit directly
};
});
注意: " ="两个对象之间的运算符,用于将RHS obj的引用分配给LHS。因此,LHS对象的任何进一步更改也将反映到RHS obj。