RouteProvider使用来自另一个路径定义的resolve属性

时间:2015-03-20 09:05:29

标签: angularjs angular-routing

我遇到了以下路线配置:

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: '/'
        });
});

并且似乎每个路由切换都通过“解决方案”来解决。最后一个定义的对象。 这是一个简化的plunkr

实际上,我理解路由顺序问题和所有正则表达式路径都应该在静态路径之后定义,但是不能将它应用到我的情况中。

此外,我认为最后两个路线定义可以合并为一个,但我再也无法掌握,如何实现它。

我很感激你的帮助,伙计们!

1 个答案:

答案 0 :(得分:1)

app.controller不会返回控制器,而是返回模块(与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