重新格式化路由中的查询参数
Reformating query parameters in the route
我有一个控制器查询参数:
export default Controller.extend({
myParam: undefined,
queryParams: ['myParam'],
});
我想刷新模型:
export default Route.extend({
queryParams: {
myParam: {
refreshModel: true
}
}
});
这在我的应用 URL(换句话说,浏览器 URL)中正确格式化和跟踪变量:
myapp.com?myParam=1
并正确发送相应的请求到我的API:
[GET] myapi.com?myParam=1
我想重新映射查询参数,以便我可以继续在我的控制器中使用 myParam
变量,但是对我的 API 的请求映射到:
[GET] myapi.com?my_param=1
我已经在我的 控制器 上尝试了以下操作:
export default Controller.extend({
queryParams: {
myParam: 'my_param'
},
});
这使得我的应用程序(浏览器 URL)中的 URL 在我更改变量时正确更改为 my_param
:
myapp.com?my_param=1
但它不会更改发送到我的API的参数,它仍然是:
[GET] myapi.com?myParam=1
是否可以将我路径中刷新模型的变量映射到不同的 URl 参数?
编辑
我注意到路由 queryParams
变量可以有一个 as
属性:
export default Route.extend({
queryParams: {
myParam: {
refreshModel: true,
as: 'my_param'
}
}
});
但是设置似乎只具有相同的效果 - 它改变了 app URL 而不是 api URL.
好的,快速而肮脏的解决方案是将其添加到路由中:
model(params) {
if ('myParam' in params) {
params['my_param'] = params['myParam'];
delete params['myParam'];
}
return this._super(...arguments);
}
不过必须有更简洁的方法来执行此操作。
有没有内置的方法来解决这个问题?
通常我是这样做的:
//controller
import { alias } from '@ember/object/computed';
....
queryParams: ['my_param'],
myParam: alias('my_param')
//route
model({ my_param }) {
}
然后您可以在模板中使用 myParam
。 URL 和 model
回调将使用 my_param
.
我有一个控制器查询参数:
export default Controller.extend({
myParam: undefined,
queryParams: ['myParam'],
});
我想刷新模型:
export default Route.extend({
queryParams: {
myParam: {
refreshModel: true
}
}
});
这在我的应用 URL(换句话说,浏览器 URL)中正确格式化和跟踪变量:
myapp.com?myParam=1
并正确发送相应的请求到我的API:
[GET] myapi.com?myParam=1
我想重新映射查询参数,以便我可以继续在我的控制器中使用 myParam
变量,但是对我的 API 的请求映射到:
[GET] myapi.com?my_param=1
我已经在我的 控制器 上尝试了以下操作:
export default Controller.extend({
queryParams: {
myParam: 'my_param'
},
});
这使得我的应用程序(浏览器 URL)中的 URL 在我更改变量时正确更改为 my_param
:
myapp.com?my_param=1
但它不会更改发送到我的API的参数,它仍然是:
[GET] myapi.com?myParam=1
是否可以将我路径中刷新模型的变量映射到不同的 URl 参数?
编辑
我注意到路由 queryParams
变量可以有一个 as
属性:
export default Route.extend({
queryParams: {
myParam: {
refreshModel: true,
as: 'my_param'
}
}
});
但是设置似乎只具有相同的效果 - 它改变了 app URL 而不是 api URL.
好的,快速而肮脏的解决方案是将其添加到路由中:
model(params) {
if ('myParam' in params) {
params['my_param'] = params['myParam'];
delete params['myParam'];
}
return this._super(...arguments);
}
不过必须有更简洁的方法来执行此操作。
有没有内置的方法来解决这个问题?
通常我是这样做的:
//controller
import { alias } from '@ember/object/computed';
....
queryParams: ['my_param'],
myParam: alias('my_param')
//route
model({ my_param }) {
}
然后您可以在模板中使用 myParam
。 URL 和 model
回调将使用 my_param
.