重新格式化路由中的查询参数

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.