2014-09-10 61 views
0

我知道這個問題被問了很多,並且我已經閱讀了關於此主題的一堆stackoverflow問題,但是我沒有做任何事情似乎解決了我的問題。請幫助告訴我我是如何成爲一個白癡。Angularjs狀態在控制器之前解決

使用angular 1.3.0。

這裏是我的狀態:

.state('app.admin.cards.edit', { 
    url: '/edit/:cardID', 
    views: { 
    cards: { 
     templateUrl: 'tpl/cards.edit.html', 
     controller: 'AdminCardEditCtrl', 
     resolve: { 
     data: ['$stateParams', 'AdminCardService', 
      function ($stateParams, AdminCardService) { 
      var cardID = $stateParams.cardID; 
      AdminCardService.getCard(cardID).then(function (data) { 
       return data; 
      }); 
      } 
     ] 
     } 
    } 
    }, 
    access: { auth: true, admin: true } 
}) 

這裏是我的控制器:

.controller('AdminCardEditCtrl', ['$scope', '$window', 'AdminCardService', 'data', 
    function ($scope, $window, AdminCardService, data) { 
    console.log(data); 
    } 
); 

這是我服務的一部分:

.factory('AdminCardService', function ($http, $q) { 
    return { 
    ... 
    getCard: function (_id) { 
     var d = $q.defer(); 
     var promise = $http.post('/api/card', { _id: _id }).success(function (data) { 
     d.resolve(data); 
     }); 
     return d.promise; 
    }, 
    ... 
    }; 
}); 

的數據永遠不會被傳遞給控制器而console.log只輸出「undefined」。如果我console.log數據在狀態或在服務中,它都按預期工作。我做錯了什麼人?

回答

2

只需在您的路由器中返回AdminCardService的結果。路由器將處理「然後」回調的這個結果發送到控制器:

resolve: { 
     data: ['$stateParams', 'AdminCardService', 
      function ($stateParams, AdminCardService) { 
      var cardID = $stateParams.cardID; 
      return AdminCardService.getCard(cardID);; 
      } 
     ] 
     } 
+0

這工作就像一個魅力!非常感謝! – codephobia 2014-09-10 19:13:56

相關問題