AngularJS Controller等待响应(或设置回调)

moo*_*nli 9 html javascript angularjs

我有一个带有controllers.js和factories.js的AngularJS应用程序.

我喜欢的是用控制器中的值(我从工厂获得)做一些事情.我的问题是,在我访问它们时这些值是空的.

我怎么能等待回复?或者我在哪里可以添加回调?

    Flashcards.controller('CardDeckDetailController', function($scope, $routeParams, CardDeckService, CardService) {
    $scope.carddeck = CardDeckService.findCardDeckByID($routeParams.cardDeckID);
    $scope.cards = CardService.findCardsByCardDeckID($routeParams.cardDeckID);
    $scope.card = $scope.cards[0];
    $scope.cardLength = $scope.cards.length;

});

    Flashcards.factory('CardDeckService', function($resource) {
    var cardDeckService = $resource('/FlashcardsServer/rest/carddecks/:cardDeckID', {}, {});

    cardDeckService.findAllCardDecks = function() {
        return cardDeckService.query();
    };

    cardDeckService.findCardDeckByID = function(id) {
        return cardDeckService.get({ cardDeckID : id });
    };

    return cardDeckService;
});
Run Code Online (Sandbox Code Playgroud)

我喜欢的是获得第一辆车($ scope.cards [0])并将其保存在$ scope.card下.但它总是空的(与cardsLength相同).

另一方面,如果我使用(cards.length)从局部视图中打印出大小,我会得到正确的值.

迎接并感谢Marc

Gui*_*e86 6

您可以通过访问值来取回承诺.$ then(必须转到源代码才能找到):

Flashcards.controller('CardDeckDetailController', function($scope, $routeParams, CardDeckService, CardService) {
$scope.carddeck = CardDeckService.findCardDeckByID($routeParams.cardDeckID);
$scope.cards = CardService.findCardsByCardDeckID($routeParams.cardDeckID);
$scope.card =  $scope.cards.$then(function(){ return $scope.cards[0]; });
$scope.cardLength = $scope.cards.$then(function(){ return $scope.cards.length; });
Run Code Online (Sandbox Code Playgroud)

编辑:$然后返回http响应