[英]Refresh / Reload ember route from a component
我有一個組件,它實際上是一個模態對話框。 當我完成該對話框並按“確定”按鈕后,我想停留在打開該對話框的停留頁面上。 這不難。
但問題是對話框更改了數據(我正在通過 REST 調用獲取數據),因此我需要刷新我已經在的路由以反映數據更改。
因為,我從一個組件調用它,我沒有Route
所以不能調用route.refresh()
。
我試圖得到路由器:
this.set('router', Ember.getOwner(this).lookup('router:main'));
並確實過渡到了同一頁面:
_this.get('router').transitionTo('my-route')
但是由於路線沒有改變(我只打開了一個對話框), transitionTo
不會被觸發!
有沒有辦法可以強制觸發transitionTo
或刷新我所在的頁面?
謝謝!
首先,您可以通過將路由服務注入到組件中來輕松獲取當前路由名稱。
然后,您可以獲取當前路由實例並應用其refresh
方法:
// app/components/a-component.js
import Component from "ember-component";
import service from "ember-service/inject";
import getOwner from "ember-owner/get";
export default Component.extend({
routing: service("-routing"),
actions: {
refresh() {
const currentRouteName = this.get("routing.currentRouteName");
const currentRouteInstance = getOwner(this).lookup(`route:${currentRouteName}`);
currentRouteInstance.refresh();
}
}
});
為此,在最近的路由或應用程序路由文件中定義refreshCurrentRoute
方法。
actions:{
refreshCurrentRoute(){
this.refresh();
}
}
從您的組件中,您需要調用refreshCurrentRoute
操作。 您可以使用ember-route-action-helper或通過關閉操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.