是否有可能param的值是angular-ui-router中的数组?

时间:2017-09-18 07:32:29

标签: angularjs angular-ui-router

我想知道状态(angular-ui-router)中的参数值如何成为一个数组。

1)状态

.state('products-by-category', {
   url: "/rent-designer-category/{price_range:int}",
   params: {
       price_range: { array: true }
   }
})

2)控制器

var urlParams = ['bt',1,150]; 
$state.transitionTo('products-by-category', urlParams, {
    location: true,
    inherit: true,
    relative: $state.$current,
    notify: false
});

3)浏览器上的网址

http://localhost:3000/rent-designer-bags/?price_range=bt&price_range=1&price_range=150

我想要的网址是:

http://localhost:3000/rent-designer-bags/?price_range=['bt',1,150]

知道我怎么能做到这一点?这可能吗?

1 个答案:

答案 0 :(得分:2)

这很简单:

.state('products-by-category', {
  params: {
    priceRange: null
  }
})

您在控制器中的代码:

var urlParams = ['bt', 1, 150]; 
$state.go('products-by-category', { priceRange: urlParams });

不要使用transitionTo,因为你不需要。 $ state.go()做得很好。您的第二个参数需要更改,因为您必须使用您已设置的数组作为其值传递所需参数的名称。你有$ state.go()的第三个参数,因为这些选项大部分都是默认选项,所以并不是真的需要。

您还直接拨打了网址。如果您已经使用路由器移动(例如$ state.go),那么您真的不需要这个。没有用户会写这样的网址,除非他们知道内部和外部的angularjs / ui-router,即使这样也不太可能。

编辑:更新答案。如果您想访问控制器中“另一侧”的阵列,您可以通过$ stateParams访问它:

export default class someClass() {
  constructor($stateParams) {
    super(arguments);

    this.priceRange = this.$stateParams.priceRange;
  }
}