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) { ... };

因为 peopleCntrlusualCntrl 指的是同一个模块对象。

虽然这可能不是最干净的解决方案,但如果您不对函数使用相同的名称,它仍然有效。

另一个解决方案如下:

var usualCntrl = function UsualResultsController($scope) { ... };

app.controller('UsualResultsController', ['$scope', usualCntrl]);

usualCntrl.performSearch = function($timeout, $q) { ... };

演示: http://plnkr.co/edit/jx6HYDXggsaq3qMOdF8c?p=preview