我有一个组件,实际上是一个模态对话框。 当我完成该对话框并按下“确定”按钮后,我想留在我打开该对话框的停留页面上。 这并不难。
但问题是对话框会更改数据(我通过REST调用获取数据)所以我需要刷新我已经使用的路径以反映数据更改。
因为我是从某个组件调用它,所以我没有Route
所以无法调用route.refresh()
。
我试图获得路由器:
this.set('router', Ember.getOwner(this).lookup('router:main'));
并转换到同一页面:
_this.get('router').transitionTo('my-route')
但由于路线没有改变(我只打开了一个对话框),transitionTo
不会被触发!
有没有办法可以强制触发transitionTo
或刷新我所在的页面?
谢谢!
答案 0 :(得分:5)
首先,您可以通过将routing service注入组件来轻松获取当前路径名称
然后,您可以获取当前路由实例并应用其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();
}
}
});
答案 1 :(得分:3)
为此,请在最近的路径或应用程序路径文件中定义refreshCurrentRoute
方法。
actions:{
refreshCurrentRoute(){
this.refresh();
}
}
从您的组件中,您需要调用refreshCurrentRoute
操作。要么你可以使用ember-route-action-helper,要么通过关闭动作。