在states.js中使用多个解析

时间:2015-02-15 10:32:24

标签: javascript angularjs angular-ui-router

我的路线如下:

var entryShow = {
  name: 'entry.show',
  url: '/:entry_id',
  views: {
    '@':{
      templateUrl: TEMPLATES.entry_show,
      controller : 'EntryShowController',
      resolve: {
        entryData: ['$stateParams', 'Entry', function($stateParams, Entry){
          return Entry.getEntry($stateParams.entry_id);
        }],
        entryHistory: ['$stateParams','Entry',function($stateParams,Entry){
          return Entry.getHistory($stateParams.entry_id);
        }]
      }
    }
  }
};

在我的控制器中,我添加了两个结果,如下所示:

App.controller('EntryShowController',['$scope','$state','entryData', 'Entry',
function($scope, $state, entryData, entryHistory, Entry) {
    ...
    $scope.entry = entryData.data.entry;
    console.log('Entry History');
    console.log(entryData);
    console.log(entryHistory);
    $scope.entry.history = entryHistory.data;
    ...
}]);

这里在console.log中我得到了entryData的正确结果但是对于entryHistory我得到了entryService对象而不是结果。此外,当我交换getEntry和getHistoyr使getHistory在第一次解析时被调用时,entryHistory中的值是正确的但在entryData中我得到了entryService对象。 我还检查了wiki是否在state.js中使用了resolve。我做错了什么?

以下是我的entryService:

App.factory('Entry', ['$http','Common', function($http,Common){
var entryService = {};

entryService.getEntry = function(entry_id) {
    show_page_loader();
    return $http.get(URLS.entry_show_path, {params: { id: entry_id }})
      .success(function(result){
        return result;
      })
      .error(function(data){
        common_flash_error_message();
      });
    };

...

entryService.getHistory = function(entry_id){
    return $http.get(
      URLS.entry_history_path,
      {
        params: {id: entry_id}
      }
    )
      .success(function(data){
        return data;
      })
      .error(function(data){
        common_flash_error_message();
      });
};

return entryService;
}]);

1 个答案:

答案 0 :(得分:2)

您已忘记将entryHistory注入阵列中,以免混淆注射:

App.controller('EntryShowController',[
         '$scope', '$state', 'entryData', 'Entry',
function( $scope,   $state,   entryData,   entryHistory, Entry) {

}]);

此处,enterHistory将保留entry