根据路径参数确定Angularjs控制器

时间:2016-01-01 18:49:00

标签: angularjs

我的路线配置如下:

        $routeProvider.when('/', {
            controller: 'homeController',
            templateUrl: 'app/views/main/home.html'
        })
            .when('/:section/:tree', {
                templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/'+$routeParams.tree+'.html'; },
                controller: function ($routeParams) { return $routeParams.tree + 'Controller'; }
            })
            .otherwise({
                redirectTo: '/'
            });
    }

视图加载正确,但没有控制器,甚至没有调用控制器功能。 有没有办法解决这个问题或根据路线参数确定控制器。

1 个答案:

答案 0 :(得分:2)

控制器功能不是返回控制器名称的功能。它应该是控制器本身。

假设tree路线参数可以是FooBar,您只需要

.when('/:section/Foo', {
    templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/Foo.html'; },
    controller: 'FooController'
})
.when('/:section/Bar', {
    templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/Bar.html'; },
    controller: 'BarController'
})

BTW,这将避免您的应用程序导致异常,即用户在URL中输入Foo或Bar以外的内容。

如果您有许多类似的路线,只需使用循环来定义它们:

['Foo', 'Bar', 'Baz', 'Brr', ...].forEach(function(tree) {
    $routeProvider.when('/:section/' + tree, {
        templateUrl: function($routeParams) { return 'App/Views/' + $routeParams.section+'/' + tree + '.html'; },
        controller: tree + 'Controller' 
    });
});