2014-09-19 107 views
18

在1.7 Ember應支持查詢參數。我沒有問題在控制器中使用它們,但我想在Route中訪問它們,理想情況是在beforeModel鉤子中,但模型鉤子也可以。如何從Ember中的路由訪問查詢參數1.7

API docs提到了beforeModel鉤子的quereyParam參數,但如果我嘗試使用它,它總是未定義的。

Query Parameters guide似乎表明查詢參數應作爲模型鉤子的第一個參數的一部分進行訪問。但是這也沒有定義。有關示例,請參閱下面的代碼。

有沒有辦法從路由訪問查詢參數? 謝謝你的幫助。

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 
    } 
}); 
+2

你應該能夠將它從模型鉤子中的'params'對象中拉出來。請參閱:http://emberjs.jsbin.com/necid/1/edit?html,js,console,output您是否將'test'設置爲控制器中的queryParam? – tikotzky 2014-09-19 22:34:38

+0

謝謝,就是這樣。我從來沒有想到Controller可能會影響Route。我認爲該設置僅用於直接在Controller中訪問queryParams。 – jancervinka 2014-09-20 15:26:42

回答

19

敢肯定這是一個錯誤,但你可以在此期間通過過渡對象訪問它們:

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

謝謝,這確實起作用,並且在beforeModel鉤子中執行此操作更爲簡單。奇怪的是,即使在1.8.1中它仍然沒有被修復。我不確定它是一個錯誤還是隻是一個不清楚的文檔。 – jancervinka 2014-11-05 17:06:34

+0

@typeoneerror:您的解決方案僅適用於locationType爲auto的情況。你知道如何抓住查詢參數,如果位置類型是散列 – 2017-03-22 21:35:32

6

通過指定控制器中的查詢參數,params會自動包含這些

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

如何訪問它們? 'console.log(this.get('test'))'扔我一個未定義。謝謝! – 2015-10-14 14:51:31

+0

完全一樣的問題? – testndtv 2015-10-16 10:32:03

+1

在路線中,您可以使用'this.controller.get('test')''test'獲取'test'的值。 – Voles 2016-04-30 13:29:20

-4

如果你想在didTransiti訪問行動,

didTransition: (queryParams) -> 
    console.log(@get('queryParams')) 
5

在最新版本的餘燼你可以在路由值

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

這隻有在的locationType在你environment.js文件自動。

5

在(在寫這個答案的時候2.12)最新版本的餘燼,queryParams可以在模型鉤來訪問如下:

import Ember from 'ember'; 

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

觀察到,現在無論動態段和queryParams都可以通過訪問params對象。由於paramsbeforeModel鉤子中不可用,所以當您必須訪問model掛鉤中的queryParams時,此解決方案纔有效。