在 angular 路由中传递变量名

Passing variable name in angular route

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

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

我需要的是格式如 /app/:appname 的 url,它应该获取名为 /template/:appname.html 的模板。我知道可以使用 :

从控制器访问 appname
$routeParams.appname;

但是我如何根据该参数呈现模板?

templateUrl 可以用作 returns a url.

的函数
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'
        });
});

你可以这样做:

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>

希望对您有所帮助。