在角度路径中传递变量名称

时间:2016-04-19 11:27:23

标签: angularjs angular-routing ngroute

目前我可以使用以下代码在AngularJs中添加路由机制:

App.config(function($routeProvider, $locationProvider) {
    $routeProvider
        .when('/', {
                templateUrl : '/templates/home.html',
                controller  : 'landing'
            })
        .when('/login', {
                templateUrl : '/templates/login.html',
                controller  : 'login'
            });
});

我需要的是一个类似/app/:appname格式的网址,它应该获取名为/template/:appname.html的模板。我知道可以使用以下命令从控制器访问appname:

$routeParams.appname;

但是如何基于该参数渲染模板?

2 个答案:

答案 0 :(得分:1)

templateUrl 可以用作返回网址的函数。

App.config(function($routeProvider, $locationProvider) {
    $routeProvider
        .when('/', {
            templateUrl : '/templates/home.html',
            controller  : 'landing'
        })
        .when('/:appname',{
            templateUrl: function(params){
                return "templates/"+params.appname +".html"
            },
            controller: 'Ctrl'
        });
});

答案 1 :(得分:1)

你可以这样做:

App.config(function($routeProvider, $locationProvider) {
    $routeProvider
        .when('/app/:appname', {
                templateUrl : '/templates/app-template.html',
                controller  : 'AppCtrl',
                resolve: {
                    appPath: function ($route) {
                        return $route.current.params.appname;
                    }
                }
            })
});
在AppCtrl中

App.controller('AppCtrl', AppCtrl);

AppCtrl.$inject = [
    '$scope'
    'appPath'
];

function AppCtrl($scope, appPath) {
    $scope.template = appPath + '.html';
}

在app-template.html中,使用ng-include作为

<div ng-include src="template"></div>

希望这有帮助。