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 つのハンドラーを含む promise です。非同期なので$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 に答える