从组件刷新/重新加载 ember 路由

Refresh / Reload ember route from a component

我有一个组件,它实际上是一个模态对话框。 当我完成该对话框并按下 "Ok" 按钮时,我想留在打开该对话框的停留页面上。 这并不难。

但问题是对话框更改了数据(我通过 REST 调用获取数据)所以我需要刷新我已经在的路由以反映数据更改。

因为我是从一个组件调用它,我没有 Route 所以不能调用 route.refresh()

我尝试获取路由器:

this.set('router', Ember.getOwner(this).lookup('router:main'));

并转换到同一页面:

_this.get('router').transitionTo('my-route')

但是由于路线没有改变(我只打开了一个对话框),transitionTo没有被触发!

有什么方法可以强制触发 transitionTo 或刷新我所在的页面?

谢谢!

首先,你可以通过向组件注入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();
    }
  }
});

为此,在最近的路由或应用程序路由文件中定义refreshCurrentRoute方法。

actions:{
 refreshCurrentRoute(){
  this.refresh();
 }
}

从您的组件中,您需要调用 refreshCurrentRoute 操作。您可以使用 ember-route-action-helper 或通过关闭操作。