观察工厂中的物体 - angularjs

时间:2015-05-13 23:47:49

标签: angularjs

在工厂我有这个:

$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

..作为最终答案。 我只是不相信按值复制对象值是可行的方法。

2 个答案:

答案 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;
    });
  });