我的州定义如下:
.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
以查看它是否命中,但事实并非如此。
答案 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