【问题标题】:how to pass in state parameter to ui-router?如何将状态参数传递给ui-router?
【发布时间】:2015-08-29 07:26:19
【问题描述】:

尝试将参数传递给我的 ui 路由器:

$state.go('orderDetail', {myParam: {accountID: $scope.selectedAccount}})

在我的stateprovider 中,orderDetail 状态如下所示:

.state('orderDetail', {
    templateUrl: 'modules/common/orders/partials/detail.html?referrer',
    controller: 'OrderDetailCtrl',
    url: '/detail/:myParam',
    resolve: {

        orderDetails: function (myservice, configService, $stateParams) {
            console.log('resolve');
            var referrer = $stateParams.myParam;
            debugger;
            console.log('stateParm', referrer.accountID);
            console.log('order detail resolving');
            //todo remove hardcoded
            return myservice.getDetail(configService.config('mock_order_detail').url + '?accountId=2233');
        }
    }
});

但是console.log('stateParm', referrer.accountID); 显示为undefined。我怎样才能传入accountID 参数?

【问题讨论】:

  • 你在 $stateParams 中接受的:myParam 是一个字符串,它来自 url 匹配器 url: /detail/:myParam 中的 splat。此字符串上不会有 accountID 属性

标签: angularjs routing angular-ui-router angularjs-routing


【解决方案1】:

要识别myParam 是对象的状态,您需要在状态params 选项中定义其默认值,方法是分配null 或您想要的任何默认值。

代码

.state('orderDetail', {
      templateUrl: 'modules/common/orders/partials/detail.html?referrer',
      controller: 'OrderDetailCtrl',
      url: '/detail/:myParam',
      resolve: {
           //resolve code here
      }
      params: {
          'myParam': null
      }
}

要使上述更改生效,您应该将 ui-router 版本更新为 0.2.13

Github Issue Link

【讨论】:

  • 我忘了说 state.go 语句在另一个设置了 accountId 的控制器中。然后它转到 stateprovider,这就是我想读取传递的参数的地方,即 accountId
  • @Leeuwtje 你尝试过我建议的方式吗...?我现在不明白你的意思..你能用更多细节更新你的问题吗..谢谢:)
  • 你找到什么了吗?
【解决方案2】:

$stateParams 仅接受字符串,但是您可以将对象字符串化为将其作为 myParam 传递

$state.go('orderDetail', {myParam: angular.fromJson({accountID: $scope.selectedAccount})})

然后

.state('orderDetail', {
    templateUrl: 'modules/common/orders/partials/detail.html?referrer',
    controller: 'OrderDetailCtrl',
    url: '/detail/:myParam',
    resolve: {
        orderDetails: function (myservice, configService, $stateParams) {
            var referrer = angular.toJson($stateParams.myParam);
            return myservice.getDetail(configService.config('mock_order_detail').url + '?accountId=2233');
        }
    }
});

但我不建议使用字符串化对象,最好使用服务作为状态的桥梁,只是因为 URL 丑陋且不安全,所以我相信内部状态必须对用户隐藏

【讨论】:

  • 它没有传入参数它仍然以“[object object]”的形式返回?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多