UI路由器控制器之前解决工作不正常

UI路由器控制器之前解决工作不正常

问题描述:

我的状态定义是这样的:UI路由器控制器之前解决工作不正常

.state('repository', { 
    url: '/repository/:host/:owner/:repository', 
    views: { 
    appView: { 
     templateUrl: '/templates/app/repository.html' 
    }, 
    '[email protected]': { 
     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看它是否命中,而不是。

+0

决心对象需要返回的承诺。一旦这个承诺解决你到达你的目的地 – 2015-02-11 14:38:47

+0

我不能解析一个函数值? https://github.com/angular-ui/ui-router/wiki#resolve – Shamoon 2015-02-11 14:39:21

+0

即便如此,它不应该至少记录一些东西吗? – Shamoon 2015-02-11 14:43:02

我创建了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

如果要用于测试目的返回一个值,你需要做的是在一个对象,在这里看到的第一个例子: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}; 
     } 
    ] 
}