9

controllers.js と factory.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;
});

私が気に入っているのは、最初の車 ($scope.cards[0]) を取得し、$scope.card の下に保存することです。ただし、常に空です (cardLength と同じ)。

一方、(cards.length) を使用して部分ビューからサイズを出力すると、正しい値が得られます。

挨拶と感謝マーク

4

3 に答える 3

0

過去数日間同じ問題が発生し、次の方法で解決しました。

cardDeckService.findCardDeckByID = function(id) {
        var toReturn = new Object();
        var something = cardDeckService.get({ cardDeckID : id }, function(){
            toReturn = something;
        });
        return toReturn;
    };

最初に空のオブジェクトを返します (ただし、「未定義」のものではありません)。DB 呼び出しが終了すると、AngularJS はオブジェクトを自動的に更新しますtoReturn。また、ビュー (コントローラーにリンクされている場合) も更新されます。

問題は、あなたのやり方で、 が値をfindCardDeckByID返すことundefinedです。したがって、$scope.card未定義であり、自動的に更新されません。したがって、ビューも更新されません。

于 2014-03-12T12:00:58.613 に答える