在工厂我有这个:
$http.get('/api/whatever').success(function(data) {
result = data.obj
});
在控制器中,我无法观察到任何变化。但是,如果我使用result
的引用,我不应该这样做:
angular.module('aModule')
.controller('TheCtrl', function ($scope, MyFactory) {
$scope.ifOnly = MyFactory.result;
});
相反,如果我这样做:
$http.get('/api/whatever').success(function(data) {
result.foo = 'foo';
result.bar = 'bar';
});
控制器中的对象获得更改。
问题是,应该注意引用,但是值的变化不是吗?
编辑:
在我试过的控制器中:
$scope.$watch('MyFactory.result', function(newVal, oldVal){
console.log('changed');
console.log(oldVal);
console.log(newVal);
}, true);
日志是:
changed
undefined
undefined
..作为最终答案。 我只是不相信按值复制对象值是可行的方法。
答案 0 :(得分:0)
要替换的引用,你可以试试这个:
result.obj = data.obj;
$scope.ifOnly = MyFactory.result.obj;
答案 1 :(得分:0)
尝试这种模式
//factory
getWhatever(){
return $http.get('/api/whatever');
}
//controller
angular.module('aModule')
.controller('TheCtrl', function ($scope, MyFactory) {
MyFactory.getWhatever().then(function(data){
$scope.ifOnly = data;
});
});