2017-02-13 45 views
0

我需要URL的'model/thing/1'部分的動態部分,因爲我試圖從當前加載的模型中訪問應用程序控制器中的模型數據在一個嵌套的路線。有沒有辦法訪問這個URL的動態部分,或者有另一種方式來訪問這些數據?如何獲取Ember中currentRouteName的動態部分js

+0

你在路由'model'鉤子中收到它。 – Lux

回答

1

如果你需要的是頁面(而不是在當前模板上顯示的模型數據(或數據)其他地方),那麼你可以使用ember-elsewhereember-wormhole

要訪問路徑參數,您可以注入私人routing service並使用其currentState.routerJsState.params屬性。屬性包含每個可用路徑PARAMS通過電流路徑名這樣的索引:

{ 
    application: {}, 
    test: { 
     model_id: "19" 
    }, 
    test.nested: { 
     nested_id: "1" 
    } 
} 

例如,顯示當前路線PARAMS我們需要沿着這些路線的東西:

控制器/ application.js中(可以是組件或任何餘燼對象)

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    routing: Ember.inject.service('-routing'), 

    params: Ember.computed('routing.currentState', 'routing.currentRouteName', function() { 
     let allParams = this.get('routing.currentState.routerJsState.params'); 
     let routeName = this.get('routing.currentRouteName'); 
     return allParams[routeName]; 
    }), 

    jsonParams: Ember.computed('params', function() { 
     let params = this.get('params'); 
     return JSON.stringify(params); 
    }) 
}); 

模板/ application.hbs

<div>params={{jsonParams}}</div> 

另一種選擇是創建一個服務並在相關路線中使用afterModel鉤子中的所需數據填充該服務。

服務/數據service.js:

import Ember from 'ember'; 

export default Ember.Service.extend({ 
}); 

嵌套路線:

路由/ nested.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    dataService: Ember.inject.service('data-service'), 

    afterModel(model, transition) { 
     this.get('dataService').set('model', model); 
    } 
}); 

控制器/ application.js中:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    dataService: Ember.inject.service('data-service') 
}); 

templates/application.hb S:

<div>{{dataService.model}}</div> 

既然你可能不希望以顯示所有路由這個數據,那麼你可以注入路由服務,並使用currentRouteName屬性來決定何時表現出來。

+0

這是獲取路由參數的完美選擇,儘管它將它作爲計算屬性返回,我需要它作爲字符串,因爲我需要將它傳遞給findRecord。我要去嘗試蟲洞。謝謝! –

+0

是的。蟲洞工程!你救命吧。那正是我需要的。 –

0

model鉤子中的第一個參數是params,它包含您正在查找的內容。

這在導遊解釋:https://guides.emberjs.com/v2.11.0/routing/specifying-a-routes-model/#toc_dynamic-model

例子:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.get('store').findRecord('photo', params.photo_id); 
    } 
}); 
+0

謝謝,但我需要訪問應用程序路由或控制器中的參數。這可能嗎? –

+0

否。原因很明顯。如果你導航到/? – Gaurav

+0

我不會問是否對我明顯的原因。你能澄清嗎?在這種情況下返回一個空字符串或類似的問題會出現什麼問題? –