无法获得ui-router状态参数

时间:2014-06-03 13:16:02

标签: angularjs angular-ui-router ionic-framework

考虑以下ui-router配置:

$stateProvider
  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'AppCtrl'
  })
  .state('app.feed', {
    url: "/feed",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }
  })

我的应用中有以下链接:

<a ui-sref="app.feed({ feedId: 5 })">My Link</a>

我试图让feedId处于状态参数:

angular.module('MyApp').controller('FeedCtrl', function($state) {
  console.log($state.params);
});

但遗憾的是,$state.params始终是{}

我做错了什么?

奖金问题

我希望每次点击链接时都会初始化FeedCtrl,即每次状态更改为app.feed时。所以,如果我多次在app.feed状态和其他状态之间切换,我希望上面的console.log能够多次运行。但是,看起来ui-router仅初始化FeedCtrl一次。为什么呢?

1 个答案:

答案 0 :(得分:6)

要传递参数 - 我们必须定义它:

 .state('app.feed', {
    url: "/feed/{feedId}",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }

在这种情况下,我们将其定义为 {feedId}

在此处查看更多信息

一些例子:

  • '/user/{id:[^/]*}' - 与上一个示例中的'/user/{id}'相同。
  • '/user/{id:[0-9a-fA-F]{1,8}}' - 与前面的示例类似,但只有在id参数包含1到8个十六进制数字时才匹配。
  • '/files/{path:.*}' - 匹配以&#39; / files /&#39;开头的所有网址并将剩下的路径捕获到参数&#39; path&#39;。
  • '/files/*path' - 同上。赶上所有的特殊语法。

如果我们确实已经定义了参数,并且我们将在具有不同feedId值的状态之间导航......我们将真正看到,该控制器FeedCtrl被重新实例化。这就是ui-router的设计方式