1

我刚开始使用 Angular.js,我试图弄清楚如何设置一个工厂来显示缓存的数据,并在收到数据后将其替换为从 REST 服务检索的数据。

为了测试这一点,我只是对“缓存”数据进行硬编码。收到数据后,我希望使用从服务器接收到的最新数据更新 $scope.directory 变量。我可以得到它

这是我的工厂代码:

app.factory('directoryFactory', function ($http) {
var factory = {};
factory.directory = [{name: "Test", ext: "123"},{name: 'Bob', ext: "234"}];

init();
function init() {
    $http({
        method: 'GET',
        url: '{restapiURL}'

    })
        .success(function (data, status, headers, config) {
            factory.directory=data;
        })
        .error(function (data, status, headers, config) {
            console.log('directory fail');
        });
}

}

我的控制器有以下代码:

$scope.directory = directoryFactory.directory;

在我看来,我使用 ng-repeat 列出所有人员及其扩展名。

我希望在收到数据后更新视图。监视工厂数据更改的正确方法是什么?

4

1 回答 1

2

$scope.directory的承诺包含成功和失败的 2 个处理程序。由于$http是异步的,你不知道什么时候应该响应,但是如果你使用“promise”会通知你then()

这是示例,POST但流程相同:

工厂:

myModule.factory('ajax_post', ['$http',  function(_http) {   

var path = 'src/php/data.ajax.php';

return{
    init: function(jsonData){
        var _promise= _http.post(path, 
            jsonData
            ,{
                headers: {
                    'SOAPActions': 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'
                }
            }
            );            
        return _promise; 
    }
  }   
 }]);

在控制器中:

 var _promise= ajax_post.init(jsonData);

  _promise.then(function (result) {

       //do something with your result
    }, 
    function (error) {
        alert(error.message);
    }
    ); 
于 2013-05-24T21:46:47.507 回答