如何重置导航控件



我有一个UI5应用程序,有三个不同的页面。

  1. 用户在第一页上输入内容,单击按钮并转到第二页。
  2. 在那里,他们按下另一个按钮并转到第三页。
  3. 在那里,他们可以回到以前的页面。

我遇到的问题是,当尝试第二次返回页面时,onInit()函数不会被调用。似乎浏览器将数据缓存在屏幕上,并且没有按照我想要的方式重置值。我必须刷新浏览器才能正常工作。

这是我的路由配置:

routing: {
  config: {
    routerClass: "sap.m.routing.Router",
    viewPath: "BatchProcessing.view",
    controlId: "rootControl",
    controlAggregation: "pages",
    viewType: "XML"
  },
  routes: [
    {
      name: "page1",
      pattern: "",
      target: "page1"
    },
    {
      name: "page2",
      pattern: "Page2",
      target: "page2"
    },
    {
      name: "page3",
      pattern: "Page3",
      target: "page3"
    }
  ],
  targets: {
    page1: {
      viewName: "InputsView",
      viewLevel: 0
    },
    page2: {
      viewName: "TableView",
      viewLevel: 1
    },
    page3: {
      viewName: "DetailsView",
      viewLevel: 3
    }
  }
}

以下是我切换页面的不同控制器的代码片段

控制器 1

onToPage2 : function () {
  this.getOwnerComponent().getRouter().navTo("page2");
},

控制器 2

onToPage1 : function () {
  // data = [];
  this.getOwnerComponent().getRouter().navTo("page1");
},

控制器 3

onToPage2 : function () {
  this.getOwnerComponent().getRouter().navTo("page2");
},

有没有办法更新/清除路由,以便当我返回页面时,一切都是新鲜的?

在控制器中使用 Router 的 attachRouteMatched()/attachRoutePatternMatched() 方法来重置数据,例如:

onInit: function() {
    sap.ui.core.UIComponent.getRouterFor(this)
        .attachRoutePatternMatched(this.onRouteMatched, this);
},
onRouteMatched: function(oEvent) {
    this.sRouteName = oEvent.getParameters().name;
    // Check route and reset your data
}

https://sapui5.hana.ondemand.com/#/api/sap.ui.core.routing.Router

最新更新