可以使用Angular UI Router隐藏URL中的一些参数吗?

Juh*_*emi 2 javascript angularjs angular-ui-router

我想通过params将两个值传递给新的ui-view:

  • 商品ID
  • 对象列表

但是,我希望新视图只显示浏览器URL中的id,而不是字符串化的对象数组:

http://www.myapp.com/#/my-view/4

INSTEAD OF

http://www.myapp.com/#/my-view/4?flskdjalfjaewoijoijasdlfkjösldakjföliwejöorijo
Run Code Online (Sandbox Code Playgroud)

是否可以a)将隐藏的对象数组传递给ui-view或b)传递两者但是将另一个隐藏在浏览器URL中?

我发现了一些关于squash参数的东西,但是无法让它做我正在尝试的事情.

这是我的观点:

  $stateProvider
  .state('show', {
    url: "/show/{itemId}?{itemList}",
    views: {
      'mainView': {
        templateUrl: 'views/itemView.html',
        controller: 'showController',
        params: {
          itemList: {
            value: null,
            squash: true
          },

          itemId: -1
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

如何在不隐藏ID的情况下隐藏URL中的对象列表?

小智 7

你是在正确的道路上.要隐藏params,你必须params像你一样定义它们,而不是squash.

您的示例应如下所示:

  $stateProvider
  .state('show', {
    url: "/show?itemId",
    views: {
      'mainView': {
        templateUrl: 'views/itemView.html',
        controller: 'showController'
        // params do not work here! They need to be attached below ...
        // $stateProvider.state('show', {url:'/show/:url_param',views:{}, params: {}})
      }
    },
    resolve: {},
    params: {
      itemList: {
        value: null
      }
    }
  })
Run Code Online (Sandbox Code Playgroud)

请参阅示例:http://plnkr.co/edit/wEjwCVWMKTyuSdyLr0og?p = preview