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

UI5中Fragment.load与Controller.loadFragment的区别及官方推荐方案

关于Controller.loadFragment与底层sap.ui.core.Fragment.load的差异及官方使用建议

为什么底层实现一致还要额外提供Controller.loadFragment方法

核心是SAP针对控制器场景做了便捷封装,解决原生Fragment.load在控制器中使用时的重复代码和易漏配置问题,主要差异点如下:

  • 自动填充必要配置,减少样板代码
    直接使用Fragment.load在控制器中加载fragment时,要保证fragment内的事件处理器绑定到当前控制器、正确继承所属视图的模型/组件上下文,需要手动传入controller、ownerId参数,还要提前引入sap/ui/core/Fragment依赖,完整写法如下:
    sap.ui.require(["sap/ui/core/Fragment"], async function(Fragment){
        this.myFragment = await Fragment.load({
            name: "my.useful.VerySimpleUiPart",
            controller: this, // 手动绑定当前控制器
            ownerId: this.getView().getId() // 手动关联所属视图ID
        });
    }.bind(this));
    
    而Controller.loadFragment会自动从当前控制器上下文获取上述参数,无需开发者手动传入,也不需要提前引入Fragment依赖,代码精简度大幅提升。
  • 自动关联生命周期,避免内存泄漏
    原生Fragment.load加载的实例不会自动绑定所属视图的生命周期,需要开发者在视图销毁时手动调用fragment的销毁方法,漏写就会产生内存泄漏。而通过Controller.loadFragment加载的fragment会自动关联当前视图的生命周期,视图销毁时fragment会被自动回收,无需额外手动处理。

SAP官方明确使用建议

所有在控制器(sap.ui.core.mvc.Controller的子类实例)上下文内加载Fragment的场景,优先使用this.loadFragment方法。仅当加载场景不在控制器上下文(如自定义工具类、全局逻辑等)时,才需要直接调用sap.ui.core.Fragment.load方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:04