2013-12-18 23 views
1

建议的方式是什么?Angular:使用来自工厂的异步AJAX数据更新范围

1.

factory.updater = function(varObjToBeUpdated){ 
    $http.post('/url', {}) 
    .success(function(data){ 
     for (data_field in data) 
      varObjToBeUpdated[data_field] = data[data_field]; 
    }); 
} 

... 

myFactory.updater($scope.varObjToBeUpdated); 

或者2,

myFactory.updater().success(function(data, ..){ 
    $scope.varObjToBeUpdated = data; 
}); 

... 

factory.updater = function(){ 
    return $http.post('/url', {}); 
} 

是否确定一个参考范围变量传递给一个工厂?我一直认为工厂为提供了数据。

第二种方法(如果它不太可接受)有什么问题?

+0

你有什么问题? –

+0

对不起,我认为这个问题现在更清楚了。 – xcorat

回答

3

我更喜欢第二种方法,因为这样可以让您在跨多个控制器需要时插入服务。使用.then继续承诺模式:

myFactory.updater().then(function(data, ..){ 
    $scope.varObjToBeUpdated = data; 
}); 

app.factory('myFactor', function($http) { 
    return { 
     updater: function() { 
      return $http({'/url',}).then(function(result) { 
       return result.data; 
      }); 
     } 
    } 
});