Sapui5 导航时在控制器之间传递数据

Sapui5 导航时在控制器之间传递数据,sapui5,Sapui5,我想在两个控制器之间传递数据(除了路由参数),我想知道正确的方法 例如:当我导航到pattern/order/{id}时,我在视图控制器中执行以下操作: this.getRouter().navTo("order", { id: sOrderId }); 我想传递额外的JSON对象,我不想成为路由参数的一部分 在这种情况下我该怎么办 --编辑 我想补充一下我想用这个实现的目标 我想把数据从主数据传递到细节。母版页和详细页都分配了单独的路由模式。因此,用户可以直接登录到master或deta

我想在两个控制器之间传递数据(除了路由参数),我想知道正确的方法

例如:当我导航到pattern
/order/{id}
时,我在视图控制器中执行以下操作:

this.getRouter().navTo("order", {
  id: sOrderId
});
我想传递额外的JSON对象,我不想成为路由参数的一部分

在这种情况下我该怎么办

--编辑
我想补充一下我想用这个实现的目标

我想把数据从主数据传递到细节。母版页和详细页都分配了单独的路由模式。因此,用户可以直接登录到master或detail。当他们登陆主控台时,用户可以选择一堆细节项目,并导航到第一个细节项目,然后从那里导航到他/她在主控台上早些时候选择的其他项目。所以我要传递的是从主控制器到细节控制器的选择


您可以创建本地模型(通常是JSONModel)并将其设置为应用程序组件内部

// inside Component.js
var model = new sap.ui.model.json.JSONModel({ foo: “bar”});
this.setModel(model);
在每个可以使用的控制器内部

var model = this.getOwnerComponent().getModel();
console.log(model.getProperty(“/foo”));

注意:如果要将选定关键帧从主视图传递到局部视图,请参见


使用客户端模型 通常,数据单独存储在模型中,而不是分配给局部变量并传递它们。然后,可以与任何可以访问模型的对象共享模型数据(例如,数据绑定视图)。 下面是一个客户端JSONModel示例:

  • 创建在父ManagedObject上设置的客户端JSONModel。例如,通过manifest.json在组件上:

    “sap.ui5”:{
    “模型”:{
    “myModel”:{
    “类型”:“sap.ui.model.json.JSONModel”
    }
    }
    }
    
  • 在控制器A中,在导航前设置要通过的对象:

    constdatatopass=/**/
    this.getOwnerComponent().getModel(“myModel”).setProperty(“/data”,dataToPass);
    
  • 在控制器B中,对传递的数据执行一些操作。例如,在
    patternMatched
    处理程序上:

    onInit:function(){
    const orderRoute=this.getOwnerComponent().getRouter().getRoute(“订单”);
    orderRoute.attachPatternMatched(this.onPatternMatched,this);
    },
    onPatternMatched:函数(){
    /*用*/this.getOwnerComponent().getModel(“myModel”).getProperty(“/data”)做某事;
    },
    
  • 使用NavContainer(子)事件 有几个与导航相关的事件,例如, ,等,其中包含两个视图-源视图(
    )和目标视图(

    您可以使用API传递数据。 以下是一个例子:

  • 在控制器A中

    onInit:function(){
    此.getView().addEventDelegate({
    onBeforeHide:函数(事件){
    const targetView=event.to;
    常量dataToPass=/**/
    targetView.data(“数据”,dataToPass);
    }
    },这个);
    },
    
  • 在控制器B中

    onInit:function(){
    此.getView().addEventDelegate({
    onBeforeShow:函数(事件){
    /*用*/this.getView()数据(“数据”)做某事;
    }
    },这个);
    },
    


  • 相关文档主题:

    正是我想要做的。我们在第一个视图中选择表中的多个项目-单击编辑(在第一个视图中)-我们转到编辑详细信息页面-然后单击保存和下一步以浏览其余选定项目。这有意义吗?。我仍然在使用split应用程序,但它更像是master有订单-detail有订单详细信息+一些项目,选择项目进入项目详细信息。所以有三个层次。后端是oData,每个视图都绑定到正确的实体。我可以制作自己的原型,以便在时间允许的情况下让您查看,但一般来说,将每个选定的条目键存储在客户端模型中,然后通过这些键(->路径)绑定元素是一种方法。。这是我现在能想到的最“干净”的方式。好的,使用客户端JSON模型。