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
看它是否命中,而不是。
答
我创建了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};
}
]
}
决心对象需要返回的承诺。一旦这个承诺解决你到达你的目的地 – 2015-02-11 14:38:47
我不能解析一个函数值? https://github.com/angular-ui/ui-router/wiki#resolve – Shamoon 2015-02-11 14:39:21
即便如此,它不应该至少记录一些东西吗? – Shamoon 2015-02-11 14:43:02