$ stateParams在控制器中为空

时间:2015-06-04 19:30:05

标签: angularjs angular-ui-router

我正在使用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,当然,预计会有参数。

1 个答案:

答案 0 :(得分:2)

上面的内容存在一些问题。

  1. 你有ng-controller =" ModuleController"在您的HTML中几次 - 这些实例正在创建,但我认为您只希望创建与ui-view关联的一个控制器。为状态定义控制器时,不需要使用ng-controller。

  2. $urlRouterProvider.otherwise需要进入完全定义的状态 - 需要定义状态参数。通常情况下,这将是一个家庭"没有参数的状态,但我更新了你的例子去/ user / none / 0。您的版本otherwise处于无效状态,因为" {id:int}"不是一个int。

  3. 您可以删除$urlRouterProvider.when语句并将otherwise更新为$urlRouterProvider.otherwise('/user/none/0');以进入默认状态。然后使用ui-sref或$ state.go进入不同的路线:

    <a ui-sref="module({username:'user 1', id: 1})">User 1</a>

    1. 在html中,您使用的是命名视图(ui-view="module"),但未在状态定义中使用...只需将html更改为ui-view
    2. 这是一个基于您之前的更新的plunker:http://plnkr.co/edit/LaSioepCFrt8kmNbUm57?p=preview