如何从Ember 1.7中的路由访问查询参数

 半邪书生66_516 发布于 2022-12-20 15:11

在1.7 Ember应该支持查询参数.我在控制器中使用它们没有问题,但我想在Route中访问它们,理想情况下在beforeModel钩子中,但模型钩子也可以.

该API文档提到一个queryParam参数为beforeModel挂钩,但如果我尝试使用它,它总是不确定的.

" 查询参数"指南似乎建议查询参数应作为模型挂钩的第一个参数的一部分进行访问.但这也是未定义的.有关示例,请参阅下面的代码.

有没有办法从Route访问查询参数?

谢谢您的帮助.

App.ApplicationRoute = Em.Route.extend({
   beforeModel: function(transition, queryParams){
       console.log(queryParams.test); //undefined at /?test=123
   },
   model: function(params){
       console.log(params.test); //undefined at /?test=123
   }
}); 

typeoneerror.. 21

很确定这是一个错误,但您可以通过转换对象同时访问它们:

App.ApplicationRoute = Em.Route.extend({
   beforeModel: function(transition){
       console.log(transition.queryParams.test);
   }
}

谢谢,这确实有效,在beforeModel hook中执行此操作更为清晰.奇怪的是,即使在1.8.1中,它仍然没有得到修复.我不确定这是一个错误还是一个不清楚的文档. (2认同)


Ramy Ben Aro.. 7

通过在控制器中指定查询参数,params将自动包含它们

ApplicationController = Ember.Controller.extend({
  queryParams: ['test'],
  test: null
});

在路由中,您可以使用`this.controller.get('test')`获取`test`的值 (2认同)

你可以像beforeModel(params){console.log(params.queryParams.test); } (2认同)


小智.. 7

在最新版本的ember中(编写本答案时为2.12),可以在模型钩子中访问queryParams,如下所示:

import Ember from 'ember';

export default Ember.Route.extend({
    queryParams: {
        test: ''
    },
    model(params) {
        console.log(params.test);
    },
});

观察现在两个动态段queryParams并可通过params对象访问.由于params在不使用beforeModel钩,该解决方案的工作,当你有访问上queryParamsmodel钩子.

4 个回答
  • 在最新版本的ember中(编写本答案时为2.12),可以在模型钩子中访问queryParams,如下所示:

    import Ember from 'ember';
    
    export default Ember.Route.extend({
        queryParams: {
            test: ''
        },
        model(params) {
            console.log(params.test);
        },
    });
    

    观察现在两个动态段queryParams并可通过params对象访问.由于params在不使用beforeModel钩,该解决方案的工作,当你有访问上queryParamsmodel钩子.

    2022-12-20 15:12 回答
  • 通过在控制器中指定查询参数,params将自动包含它们

    ApplicationController = Ember.Controller.extend({
      queryParams: ['test'],
      test: null
    });
    

    2022-12-20 15:13 回答
  • 很确定这是一个错误,但您可以通过转换对象同时访问它们:

    App.ApplicationRoute = Em.Route.extend({
       beforeModel: function(transition){
           console.log(transition.queryParams.test);
       }
    }
    

    2022-12-20 15:13 回答
  • 在最新的ember版本中,您可以获得Route as中的值

    import Ember from 'ember';
    export default Ember.Route.extend({
      beforeModel(params){ 
          console.log(params.queryParams.test); //if the parameter contains test as the key
      }
    });
    

    仅当environment.js文件中的locationType为auto时,此方法才有效.

    2022-12-20 15:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有