Sapui5 如何重置导航控件

Sapui5 如何重置导航控件,sapui5,Sapui5,我有一个UI5应用程序,有三个不同的页面 用户在第一页上输入内容,单击按钮并转到第二页 在那里,他们按下另一个按钮,进入第三页 在那里,他们可以回到以前的页面 我遇到的问题是,当第二次尝试返回页面时,onInit()函数没有被调用。看起来浏览器会在屏幕上缓存数据,并且不会按照我的要求重置值。我必须刷新浏览器才能正常工作 以下是我的路由配置: routing: { config: { routerClass: "sap.m.routing.Router", viewPath:

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

  • 用户在第一页上输入内容,单击按钮并转到第二页
  • 在那里,他们按下另一个按钮,进入第三页
  • 在那里,他们可以回到以前的页面
  • 我遇到的问题是,当第二次尝试返回页面时,
    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");
    },
    
    有没有办法更新/清除路由,这样当我返回页面时,一切都是新的?

    在控制器中使用路由器的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
    }
    

    您在屏幕上使用绑定吗?我使用,每个屏幕都有一组不同的绑定。例如,在我的onInit()中,我有这样的东西。setBindings()调用函数来处理它。这不是只有当我通过不同的控制器传递数据时才适用吗?我没有在使用component.js文件中的模式设置之间传递任何数据。在仔细检查之后,这似乎是一种方法(忽略getParameters(),而是执行一些逻辑)。