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

时间:2015-02-11 14:31:42

标签: angularjs angular-ui-router

我的州定义如下:

.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只是为了看看它是否会在不担心承诺的情况下返回。我做了console.log以查看它是否命中,但事实并非如此。

2 个答案:

答案 0 :(得分:1)

如果要为测试目的返回值,则需要在对象中执行此操作,请参阅此处的第一个示例: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};
        }
    ]
}

答案 1 :(得分:1)

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

  

控制器属于视图=== { 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