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
我的状态定义如下:
.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