ember.js 从组件刷新/重新加载成员路由

hmtdttj4  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(213)

我有一个组件,它实际上是一个模态对话框。当我完成对话框并按下“确定”按钮时,我想停留在我打开对话框的停留页面上。这并不困难。
但问题是对话框更改了数据(我是通过REST调用获取数据的),因此我需要刷新已经使用的路由以反映数据更改。
因为我是从一个组件调用它的,所以我没有Route,所以不能调用route.refresh()
我试着去拿路由器:
this.set('router', Ember.getOwner(this).lookup('router:main'));
并且确实转换到了同一页:
_this.get('router').transitionTo('my-route')
但是由于路由没有改变(我只打开了一个对话框),所以transitionTo没有被触发!
是否有办法强制触发transitionTo或刷新我所在的页面?
谢谢你,谢谢你

rjzwgtxy

rjzwgtxy1#

首先,通过将routing service注入到组件中,可以轻松地获得当前路由名称。
然后,您可以获取当前的route示例并应用其refresh方法:

  1. // app/components/a-component.js
  2. import Component from "ember-component";
  3. import service from "ember-service/inject";
  4. import getOwner from "ember-owner/get";
  5. export default Component.extend({
  6. routing: service("-routing"),
  7. actions: {
  8. refresh() {
  9. const currentRouteName = this.get("routing.currentRouteName");
  10. const currentRouteInstance = getOwner(this).lookup(`route:${currentRouteName}`);
  11. currentRouteInstance.refresh();
  12. }
  13. }
  14. });
展开查看全部
nxowjjhe

nxowjjhe2#

为此,在最近路线或应用路线文件中定义refreshCurrentRoute方法。

  1. actions:{
  2. refreshCurrentRoute(){
  3. this.refresh();
  4. }
  5. }

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

相关问题