2

私はAngularJSを初めて使用するので、優しくしてください。

AngularJS の $resource プロパティを使用してバックエンドからデータを取得したいのですが、実際の呼び出しが完了する前にプロパティが読み込まれているようです。

現在、次のコードがあります。

コントローラ:

MyApp.controller('IndexCtrl', function IndexCtrl($scope, socket, carsRes) {
    console.log(carsRes.cars.get());
    $scope.cars = carsRes.cars.get();
});

工場

.factory('carsRes', function($resource) {
        var result = {};
        result.cars = $resource('/cars/:id', {}, {
            'get': {method: 'GET'},
            'save': {method: 'POST'},
            'query': {method: 'GET', isArray: true},
            'remove': {method: 'DELETE'},
            'delete': {method: 'DELETE'}
        });

        return result;
 });

しかし、carsRes.cars.get() を $scope.cars に保存したい時点で、呼び出しはまだ完了しておらず、console.log は $resolved がまだ false であることを示しています。

通話が解決されるまでどのように待つことができますか? $q について読んだことがありますが、よくわかりません。

4

1 に答える 1

6

これはresource.get()が非同期であるために発生しています。すぐに空の参照を返し、ajax 呼び出しが完了すると、実際のデータが入力されます。

結果を処理する最良の方法は、コールバック関数を使用することです。

carsRes.cars.get(function(response){ 
    // We now have a completed ajax call, with the response
    $scope.cars = response;
});

$resourceドキュメントでその他の例を参照してください。

于 2013-04-13T14:43:13.890 に答える