Angularjs状态在控制器之前解析

时间:2014-09-10 18:37:48

标签: angularjs

我知道这个问题被问了很多,我已经阅读了关于这个主题的一堆stackoverflow问题但我没做什么似乎解决了我的问题。请帮我告诉我自己是个白痴。

使用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”。如果我在州或服务中控制日志数据,那么它们都按预期工作。我做错了什么人?

1 个答案:

答案 0 :(得分:2)

只需在路由器中返回AdminCardService的结果即可。路由器将处理'然后'回调并将结果发送给您的控制器:

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