SAPUI5,sap.ui.core.UIComponent和sap.ui.core.Component是两个不同的概念,但是它们之间是有联系的。sap.ui.core.Component是SAPUI5框架中用于封装应用程序或控件的基类。它是应用程序或控件的根级对象,负责管理和加载应用程序或控件中的所有资源,包括模型、视图和控制器。sap.ui.core.Component可以通过在manifest.json文件中配置来实现。sap.ui.core.UIComponent是sap.ui.core.Component的子类,是SAPUI5应用程序中的核心组件。它包含应用程序中所有其他组件的定义,例如视图、控制器、模型和服务。它还提供了一个生命周期来管理这些组件,使开发人员能够更好地控制应用程序的初始化、销毁和更新。在SAPUI5应用程序中,通常只有一个UIComponent实例。因此,UIComponent是一个特殊的Component,它定义了整个SAPUI5应用的基本结构和生命周期。UIComponent实例化和管理应用程序中的所有其他组件,同时提供一些应用程序特定的功能,例如路由、事件总线等。简而言之,sap.ui.core.Component是SAPUI5框架中所有组件的基类,而sap.ui.core.UIComponent是基于sap.ui.core.Component的特殊组件,它定义了SAPUI5应用程序的基本结构和生命周期。而sap.ui.core.UIComponent.createContent是创建这个组件的内容(UI控制树)的hook方法。此类中的默认实现从组件的描述符(路径/sap.ui5/rootView)中读取根视图的名称(和可选类型),或者为了向后兼容,仅从读取名称中的静态组件元数据(属性rootView)中读取.如果未指定类型,则默认为XML。然后该方法调用视图工厂来实例化根视图并返回结果。没有配置根视图时返回null。如果默认实现不满足需要,这个方法可以被子类重写。子类不限于视图作为返回类型,而是可以返回任何控件,但只能返回一个控件(但可以是更大的控件树的根)。sap.ui.core.UIComponent子类也可以实现sap.ui.core.IAsyncContentCreation接口。实现此接口时,异步rootView的加载和处理将链接到Component.create工厂的结果Promise中。可以省略额外的异步标志。请参见下面的示例1:sap.ui.define(["sap/ui/core/UIComponent","sap/ui/core/Fragment"],function(UIComponent,Fragment){returnUIComponent.extend("my.sample",{元数据:{rootView:{viewName:"my.sample.views.Main",类型:"XML",id:"sampleMainView"},接口:["sap.ui.core.IAsyncContentCreation"]}});});上面的示例显示了异步创建XML根视图定义的方法。示例2和3显示了子类如何覆盖createContent函数以异步运行。要异步创建根控件,子类必须在元数据中定义sap.ui.core.IAsyncContentCreation接口。以下代码展示了异步创建XML根视图实例的具体步骤:sap.ui.define(["sap/ui/core/UIComponent","sap/ui/core/mvc/XMLView"],function(UIComponent,XMLView){returnUIComponent.extend("my.sample",{metadata:{//...interfaces:["sap.ui.core.IAsyncContentCreation"]},createContent:function(){//动态创建根查看返回XMLView.create({...});}});});以下代码展示了异步创建XML片段的方法:sap.ui.define(["sap/ui/core/UIComponent","sap/ui/core/Fragment"],function(UIComponent,Fragment){returnUIComponent.extend("my.sample",{metadata:{//...interfaces:["sap.ui.core.IAsyncContentCreation"]},createContent:function(){//在这个用例中,片段必须只有一个单独的根控件。//根控件可以包含多个c依次控制。返回Fragment.load({...});}});});
