ui-路由器在控制器无法正常工作之前解析

ui-router resolving before a controller not working properly

我的状态定义如下:

.state('repository', {
  url: '/repository/:host/:owner/:repository',
  views: {
    appView: {
      templateUrl: '/templates/app/repository.html'
    },
    'repositoryView@repository': {
      templateUrl: '/templates/app/_repositoryAnalytics.html'
    }
  },
  resolve: {
    resolvedRepository: [
      '$stateParams', 'RepositoryService', function($stateParams, RepositoryService) {
        console.log(RepositoryService.find($stateParams.host, $stateParams.owner, $stateParams.repository));
        return 1;
      }
    ]
  },
  controller: 'AnalyticsController'
});

然而,它递交并且永远不会到达 AnalyticsController。如果我删除 resolve,那么它就可以正常工作(当然,除了我没有已解析的值)。

我现在 return 1 只是想看看它是否会 return 一些东西而不用担心承诺。我做了 console.log 看它是否命中,但没有。

如果您想 return 一个用于测试目的的值,您需要在一个对象中进行,请参见此处的第一个示例:https://github.com/angular-ui/ui-router/wiki#resolve

resolve: {
    resolvedRepository: [
        '$stateParams',
        'RepositoryService',
        function($stateParams, RepositoryService) {
            return {'value': 1};
        }
    ]
}

如果这不起作用,请尝试忽略您的 RepositoryService 以检查是否是问题所在:

resolve: {
    resolvedRepository: [
        '$stateParams',
        function($stateParams) {
            return {'value': 1};
        }
    ]
}

我创建了 prvious plunker here 的更新。如果所有部件都正常,则一切正常。您的 resolve 代码没问题(它实际上 return 可能只是一个值)。 唯一不同的是

The controller belongs to the view === { views : { viewName : { template, controller}}}

控制器不应该(不能)在状态级别定义。它只是用来做 MVC 的东西...

$stateProvider.state('repository', {
  url: '/:host/:owner/:repository',
  views: {
    appView: {
      template: '<div><h1>Repository</h1><div ui-view="repositoryView" ></div>',
      controller: 'AnalyticsController', // here is new position
    }
  },
  // removed from here
  // controller: 'AnalyticsController',
  resolve: { 
    resolvedRepository: [
      '$stateParams', 'RepositoryService', function($stateParams, RepositoryService) {
        console.log(RepositoryService.find($stateParams.host, $stateParams.owner, $stateParams.repository));
        return 1;
      }
    ]
  },

实际查看 here