我想知道状态(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]
知道我怎么能做到这一点?这可能吗?
答案 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;
}
}