观察工厂中的物体-angularjs

观察工厂中的物体-angularjs,angularjs,Angularjs,在一家工厂里,我有这样的想法: $http.get('/api/whatever').success(function(data) { result = data.obj }); 在控制器中,我无法观察到任何变化。但是,如果我引用结果的话,我不应该这样做吗 angular.module('aModule') .controller('TheCtrl', function ($scope, MyFactory) { $scope.ifOnly = MyFactory.

在一家工厂里,我有这样的想法:

$http.get('/api/whatever').success(function(data) {
  result = data.obj
});
在控制器中,我无法观察到任何变化。但是,如果我引用
结果
的话,我不应该这样做吗

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
…作为最后的答案。
我只是不相信按值复制对象值是正确的做法。

要替换的引用,您可以尝试以下方法:

result.obj=data.obj

$scope.ifOnly = MyFactory.result.obj;
试试这个模式

//factory
getWhatever(){
  return $http.get('/api/whatever');
}

//controller
angular.module('aModule')
  .controller('TheCtrl', function ($scope, MyFactory) {      
    MyFactory.getWhatever().then(function(data){
       $scope.ifOnly = data;
    });
  });

不,是同一个问题。我只是不明白为什么一个引用没有被注意到,而一个更改的值是。“result”在result=data之后有一个新地址。objyes,我明白了。我想你是对的。但你的建议也会导致同样的坏结果:(