You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAPUI5视图间数据交互求助:选中行数据传递方案

SAPUI5视图间数据交互解决方案

针对你需要在视图间传递表格选中行数据的需求,下面提供两种实用方案,都是新手易上手的实现方式:

方案一:使用全局JSON模型(适合多视图共享数据场景)

全局模型绑定在应用根组件(Component)上,所有视图都能直接访问,适合需要在多个视图间复用数据的场景。

  1. 创建全局模型
    在Component.js的init方法中初始化全局模型,确保应用启动时就存在:
init: function() {
    // 调用父类初始化方法
    sap.ui.core.UIComponent.prototype.init.apply(this, arguments);
    // 创建全局JSON模型,初始为空对象
    var oGlobalModel = new sap.ui.model.json.JSONModel({
        selectedRow: {} // 用于存储选中行数据
    });
    // 将模型绑定到组件,指定命名空间"globalData"避免冲突
    this.setModel(oGlobalModel, "globalData");
    // 初始化路由(已有代码可保留)
    this.getRouter().initialize();
}
  1. 源视图更新全局模型
    在表格的selectionChange事件中,获取选中行数据并更新全局模型:
onTableSelectionChange: function(oEvent) {
    // 获取选中的行对象
    var oSelectedItem = oEvent.getParameter("listItem");
    // 获取选中行绑定的数据对象
    var oSelectedData = oSelectedItem.getBindingContext().getObject();
    // 通过组件获取全局模型并更新数据
    this.getOwnerComponent().getModel("globalData").setProperty("/selectedRow", oSelectedData);
    // 执行你已完成的导航逻辑
    this.getRouter().navTo("TargetView");
}
  1. 目标视图读取全局模型数据
    在目标视图控制器的onInit方法中读取数据,或直接在XML视图中绑定:
onInit: function() {
    // 获取全局模型
    var oGlobalModel = this.getOwnerComponent().getModel("globalData");
    // 获取选中行数据
    var oSelectedRow = oGlobalModel.getProperty("/selectedRow");
    // 后续业务处理,比如赋值给本地模型或操作控件
    console.log("选中行数据:", oSelectedRow);
}

XML视图绑定示例:

<Text text="{globalData>/selectedRow/yourFieldName}"/>

方案二:导航时直接传递参数(适合单次数据传递场景)

如果只是单次导航传递数据,不需要全局共享,可直接通过路由参数传递,步骤更简洁:

  1. 源视图导航时传递参数
    在导航方法中,将选中行数据序列化为JSON字符串后作为路由参数传递:
onTableSelectionChange: function(oEvent) {
    var oSelectedItem = oEvent.getParameter("listItem");
    var oSelectedData = oSelectedItem.getBindingContext().getObject();
    // 路由参数仅支持字符串,需将数据转为JSON字符串
    var sDataStr = JSON.stringify(oSelectedData);
    // 导航时传入参数
    this.getRouter().navTo("TargetView", {
        selectedData: sDataStr
    });
}
  1. 目标视图获取并解析参数
    在目标视图的路由匹配事件中获取参数并反序列化:
onInit: function() {
    // 监听路由匹配事件
    this.getRouter().getRoute("TargetView").attachMatched(this.onRouteMatched, this);
},

onRouteMatched: function(oEvent) {
    // 获取路由参数
    var oArgs = oEvent.getParameter("arguments");
    // 反序列化JSON字符串为数据对象
    var oSelectedData = JSON.parse(oArgs.selectedData);
    // 业务处理逻辑
    console.log("传递过来的数据:", oSelectedData);
}

注意事项

  • 全局模型适合多视图复用的数据;单次传递优先用路由参数,避免全局数据冗余。
  • 路由参数传递复杂对象必须序列化,否则会丢失数据结构。
  • 尽量通过getOwnerComponent()获取模型,而非sap.ui.getCore().getModel(),更符合组件化开发规范。

内容的提问来源于stack exchange,提问作者Hassen Elec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:06:44