我有一条处理创建,修改,查看和用户列表的路径,如下所示:
angular
.module('abcApp', ['ui.router'])
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('user.add', {
url: '/mgt/user/add',
templateUrl: 'views/mgt_user/add.html',
controller: 'MgtUserCtrl'
})
.state('user.view', {
url: '/mgt/user/view/:userId',
templateUrl: 'views/mgt_user/view.html',
controller: 'MgtUserCtrl'
})
.state('user.list', {
url: '/mgt/user/list',
templateUrl: 'views/mgt_user/list.html',
controller: 'MgtUserCtrl'
});
});
我想使用一条路线,我可以将mode
作为参数传递给templateUrl
:
angular
.module('abcApp', ['ui.router'])
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('userMangement', {
url: '/mgt/user/:mode/:userId',
templateUrl: 'views/mgt_user/' + $routeParams.mode + '.html',
controller: 'MgtUserCtrl'
});
});
mode
可以是:view
,edit
,list
。
有办法做到这一点吗?
答案 0 :(得分:4)
您可以使用templateProvider。
$stateProvider
.state('userManagement', {
url: '/mgt/user/:mode/:userId',
controller: 'MgtUserCtrl',
templateProvider: ['$route', '$templateCache', '$http', function($route, $templateCache, $http) {
var url = '/views/mgt_user/' + $route.current.params.mode + '.html';
$http.get(url, {cache: $templateCache}).then(function(html) {
return html;
});
}]
})
你不能在这里使用$ routeparams,因为在$ routeChangeSuccess事件之后可以使用$ routeParams。