RouteProvider 使用来自另一个路由定义的 resolve 属性
RouteProvider uses resolve property from another route definition
我遇到了以下路由配置问题:
app.config(function ($routeProvider) {
$routeProvider
.when('/common/query/:query', {
templateUrl: 'common.html',
controller: 'UsualResultsController',
resolve: {
UsualResults: usualCntrl.performSearch
}
})
.when('/people/query/:query', {
template: 'people.html',
controller: 'PeopleResultsController',
resolve: {
PeopleResults: peopleCntrl.performSearch
}
})
.when('/people/query/:query/department/:department', {
template: people.html',
controller: 'PeopleResultsController',
resolve: {
PeopleResults: peopleCntrl.performSearch
}
})
.otherwise({
redirectTo: '/'
});
});
而且似乎每个路由切换都是用上一个定义中的 'resolve' 对象解决的。
这是一个简化的 plunkr.
实际上,我理解路由顺序很重要,所有正则表达式路径都应在静态路径之后定义,但无法应用于我的情况。
此外,我想最后两个路由定义可以合并为一个,但我又无法理解,如何实现它。
伙计们,我将感谢你们的帮助!
app.controller
不是return控制器,而是模块(与angular.module
相同)。
在您的示例中:
peopleCntrl.performSearch = function($timeout, $q) { ... };
将替换定义的函数:
usualCntrl.performSearch = function($timeout, $q) { ... };
因为 peopleCntrl
和 usualCntrl
指的是同一个模块对象。
虽然这可能不是最干净的解决方案,但如果您不对函数使用相同的名称,它仍然有效。
另一个解决方案如下:
var usualCntrl = function UsualResultsController($scope) { ... };
app.controller('UsualResultsController', ['$scope', usualCntrl]);
usualCntrl.performSearch = function($timeout, $q) { ... };
我遇到了以下路由配置问题:
app.config(function ($routeProvider) {
$routeProvider
.when('/common/query/:query', {
templateUrl: 'common.html',
controller: 'UsualResultsController',
resolve: {
UsualResults: usualCntrl.performSearch
}
})
.when('/people/query/:query', {
template: 'people.html',
controller: 'PeopleResultsController',
resolve: {
PeopleResults: peopleCntrl.performSearch
}
})
.when('/people/query/:query/department/:department', {
template: people.html',
controller: 'PeopleResultsController',
resolve: {
PeopleResults: peopleCntrl.performSearch
}
})
.otherwise({
redirectTo: '/'
});
});
而且似乎每个路由切换都是用上一个定义中的 'resolve' 对象解决的。 这是一个简化的 plunkr.
实际上,我理解路由顺序很重要,所有正则表达式路径都应在静态路径之后定义,但无法应用于我的情况。
此外,我想最后两个路由定义可以合并为一个,但我又无法理解,如何实现它。
伙计们,我将感谢你们的帮助!
app.controller
不是return控制器,而是模块(与angular.module
相同)。
在您的示例中:
peopleCntrl.performSearch = function($timeout, $q) { ... };
将替换定义的函数:
usualCntrl.performSearch = function($timeout, $q) { ... };
因为 peopleCntrl
和 usualCntrl
指的是同一个模块对象。
虽然这可能不是最干净的解决方案,但如果您不对函数使用相同的名称,它仍然有效。
另一个解决方案如下:
var usualCntrl = function UsualResultsController($scope) { ... };
app.controller('UsualResultsController', ['$scope', usualCntrl]);
usualCntrl.performSearch = function($timeout, $q) { ... };