我正在使用ui.router加载一个视图然后需要2个参数的不同API路由:用户名和ID
app.route.js
angular
.module('app.route',['ui.router'])
.config([
'$stateProvider',
'$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.when('', '/{username}/{id:int}');
$urlRouterProvider.when('/', '/{username}/{id:int}');
$urlRouterProvider.otherwise('/{username}/{id:int}');
$stateProvider.state('module', {
url: '/{username}/{id:int}',
templateUrl: 'app/module/module.html',
controller: 'ModuleController',
});
}
]);
module.controller.js
function ModuleController($state, $stateParams) {
console.log('$stateParams: ', $stateParams); // returns empty
console.log('$state.params: ', $state.params); // returns empty
}
即使我的网址似乎很好(例如。Retrolamba),两个参数都会被忽略。我想念一下吗?
这是输出:
$stateParams: Object {}
$state.params: Object {}
我没有任何与之相关的错误。 我得到了一些关于路线的404,当然,预计会有参数。
答案 0 :(得分:2)
上面的内容存在一些问题。
你有ng-controller =" ModuleController"在您的HTML中几次 - 这些实例正在创建,但我认为您只希望创建与ui-view关联的一个控制器。为状态定义控制器时,不需要使用ng-controller。
$urlRouterProvider.otherwise
需要进入完全定义的状态 - 需要定义状态参数。通常情况下,这将是一个家庭"没有参数的状态,但我更新了你的例子去/ user / none / 0。您的版本otherwise
处于无效状态,因为" {id:int}"不是一个int。
您可以删除$urlRouterProvider.when
语句并将otherwise
更新为$urlRouterProvider.otherwise('/user/none/0');
以进入默认状态。然后使用ui-sref或$ state.go进入不同的路线:
<a ui-sref="module({username:'user 1', id: 1})">User 1</a>
ui-view="module"
),但未在状态定义中使用...只需将html更改为ui-view
。这是一个基于您之前的更新的plunker:http://plnkr.co/edit/LaSioepCFrt8kmNbUm57?p=preview