Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 重新设置路由中的查询参数_Ember.js - Fatal编程技术网

Ember.js 重新设置路由中的查询参数

Ember.js 重新设置路由中的查询参数,ember.js,Ember.js,我有一个控制器查询参数: export default Controller.extend({ myParam: undefined, queryParams: ['myParam'], }); 我想用以下内容刷新模型: export default Route.extend({ queryParams: { myParam: { refreshModel: true } } }); 这将正确格式化并跟踪

我有一个控制器查询参数:

export default Controller.extend({
    myParam: undefined,
    queryParams: ['myParam'],
});
我想用以下内容刷新模型:

export default Route.extend({
    queryParams: {
        myParam: {
            refreshModel: true
        }
    }
});
这将正确格式化并跟踪我的应用程序URL(换句话说,浏览器URL)中的变量:

并将相应的请求正确发送到我的API:

[GET] myapi.com?myParam=1
我想重新映射查询参数,以便可以继续在控制器中使用
myParam
变量,但对我的API的请求被映射到:

[GET] myapi.com?my_param=1
我在控制器上尝试了以下操作:

当我更改变量时,这会使我的应用程序中的URL(浏览器URL)正确更改为
my_param

myapp.com?my_param=1
但它不会更改发送到我的API的参数,它仍然是:

[GET] myapi.com?myParam=1
是否需要将刷新路径中模型的变量映射到其他URl参数

编辑

我注意到route
queryParams
变量可以有一个
as
属性:

export default Route.extend({
    queryParams: {
        myParam: {
            refreshModel: true,
            as: 'my_param'
        }
    }
});

但设置似乎也有同样的效果-它会更改应用程序URL,但不会更改api URL。

好的,快速脏的解决方案是将此添加到路由:

model(params) {
    if ('myParam' in params) {
      params['my_param'] = params['myParam'];
      delete params['myParam'];
    }
    return this._super(...arguments);
}
但必须有一种更干净的方法来做到这一点

有什么内在的方法可以做到这一点吗

通常我是这样做的:

然后可以在模板中使用
myParam
。URL和
model
回调将使用
my_param

export default Route.extend({
    queryParams: {
        myParam: {
            refreshModel: true,
            as: 'my_param'
        }
    }
});
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 }) {

}