UI路由器$ stateparams未在$ state.go()中注册

时间:2015-10-14 19:06:49

标签: angularjs state angular-ui-router

我试图以编程方式非常简单地转到另一个州并传递参数,所以:

$stateService.go('login', {
      messages: [{
        service: 'Auth',
        type: 'error',
        msg: "Your session has expired. Please log in to continue..."
      }]
    });

$stateService是为了避免ui-router和state之间的循环依赖(两者都使用$ http)

var $stateService = $injector.get('$state');

这是登录状态,加载到$stateProvider

angular
    .module('kitchenapp')
    .config(['$stateProvider', function ($stateProvider) {
      $stateProvider
        .state('login', {
            url: '/login',
          templateUrl: 'views/login/login.html',
          controller: 'LoginCtrl',
          controllerAs: 'vm'
        });
     }]);

然后我去登录控制器

angular
    .module('kitchenapp.controllers')
    .controller('LoginCtrl', LoginCtrl);

LoginCtrl.$inject = ['$location', 'Auth', 'toastr', '$stateParams', '$log'];

function LoginCtrl($location, Auth, toastr, $stateParams, $log) {

  var vm = this;

  angular.extend(vm, {

    name: 'LoginCtrl',
    messages: $stateParams.messages,
...

$stateParams.messages为空。我做错了什么?

2 个答案:

答案 0 :(得分:2)

必须定义应属于州的任何parameter。在url或通过params: {}对象:

 $stateProvider
    .state('login', {
      url: '/login',
      templateUrl: 'views/login/login.html',
      controller: 'LoginCtrl',
      controllerAs: 'vm',
      params: { messages : null },
    });

查看更多详情:

How to pass parameters using ui-sref in ui-router to controller

答案 1 :(得分:2)

你应该注册"消息"州内的参数。见https://github.com/angular-ui/ui-router/wiki/URL-Routing#important-stateparams-gotcha

相关问题