【问题标题】:How can I invoke onInit() each time I go to a view? [duplicate]每次查看视图时如何调用 onInit() ? [复制]
【发布时间】:2017-03-01 09:20:21
【问题描述】:

我有两个视图:登录和菜单。

场景:

登录 --> onInit() , onBeforeRendering() , onAfterRendering() 获取 在 Menu.controller.js 中调用并转到菜单视图。

退出 --> deleteData(); oRouter.navTo("Login", {}, true); 返回 登录视图。

登录 --> onInit() , onBeforeRendering() , onAfterRendering() 不会被调用并转到菜单视图。

我尝试将我的菜单控制器附加到 onInit 中的特定路由,但它不起作用:

function onInit(){
    this._oRouter = sap.ui.core.UIComponent.getRouterFor(this);
    this._oRouter.attachRouteMatched(initMenu, this);
    this.initMenu();
}

如何再次强制调用上述方法?我需要重新加载 onInit() 函数中的 initMenu() 方法才能正确接收菜单。

【问题讨论】:

    标签: javascript sapui5 reload


    【解决方案1】:

    onInit 只被调用一次。其生命周期方法为Sapui5。如果您想要一个每次导航时都会调用的函数,请使用 onAfterRendering 或 onBeforeRendering。其他明智的创建函数并从路由匹配中调用该函数。

    上面的路由匹配应该是这样的。

    this._oRouter = sap.ui.core.UIComponent.getRouterFor(this);
     this._oRouter.attachRouteMatched(this.yurfunction, this);
    

    //现在做如下操作

    yurfunction(){ //now give call to you function from here }
    

    【讨论】:

    • 我已经尝试了这两种方法,但它们都不起作用。如果我从路由匹配中调用该函数,它也会在我注销时运行。如果我使用 onAfterRendering 或 onBeforeRendering 没有任何反应,因为页面不会重新渲染。
    • 好吧,这只是路由匹配的问题,创建一个全局变量并在函数执行后将其赋值为真,使该全局变量为假。 sap.ui.getCore().urVariable=true;在 onInit 中执行此操作。现在 if(sap.ui.getCore().urVariable){// 你的东西.sap.ui.getCore().urVariable=false; } 将其设置为 false。
    【解决方案2】:

    您可以查看视图的 onBeforeShow() 方法。每次显示视图时都会调用此生命周期挂钩。您可以在这里进行操作。见:https://openui5.hana.ondemand.com/#docs/api/symbols/sap.m.NavContainerChild.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多