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

问题描述 投票:2回答:2

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

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

this.getRouter().navTo("order", {
  id: sOrderId
});

我想传递额外的JSON对象,我不想成为路由参数的一部分。

在这种情况下我该怎么办?

- 编辑 想要添加我喜欢的东西

我希望将数据从主数据传递到详细信息。主页面和详细信息页面都分配了单独的路由模式。因此用户可以直接登陆主人或细节。当他们落在主人身上时 - 用户可以选择一堆细节项目,并导航到第一个细节项目,并从那里导航到他/她之前在主人选择的其他项目。所以我想要传递的是从主控制器到细节控制器的选择。

sapui5
2个回答
2
投票

Using Client-side Model

通常,数据分别存储在模型中,而不是分配给局部变量并传递它们。然后可以与可以访问模型的任何东西共享模型数据(例如,查看数据绑定)。以下是客户端JSONModel的示例:

  1. 创建在父ManagedObject上设置的客户端JSONModel。例如。在组件上通过manifest.json: "sap.ui5": { "models": { "myModel": { "type": "sap.ui.model.json.JSONModel" } } }
  2. 在控制器A中,在导航之前将对象设置为通过: const dataToPass = /*...*/ this.getOwnerComponent().getModel("myModel").setProperty("/data", dataToPass);
  3. 在控制器B中,对传递的数据执行某些操作。例如。在patternMatched处理程序: onInit: function() { const orderRoute = this.getOwnerComponent().getRouter().getRoute("order"); orderRoute.attachPatternMatched(this.onPatternMatched, this); }, onPatternMatched: function() { /*Do sth with*/ this.getOwnerComponent().getModel("myModel").getProperty("/data"); },

Using NavContainer(Child) Events

有几个导航相关的事件,如navigateBeforeHideBeforeShow等,包含两个视图 - 源视图(from)和目标视图(to)。

您可以使用API​​ data来传递数据。这是一个例子:

  1. 在控制器A中 onInit: function() { this.getView().addEventDelegate({ onBeforeHide: function(event) { const targetView = event.to; const dataToPass = /*...*/ targetView.data("data", dataToPass); } }, this); },
  2. 在控制器B中 onInit: function() { this.getView().addEventDelegate({ onBeforeShow: function(event) { /*Do sth with*/ this.getView().data("data"); } }, this); },

相关文档主题:Passing Data when Navigating


0
投票

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

// 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”));
© www.soinside.com 2019 - 2024. All rights reserved.