SAPUI5中是否有类似角度服务的概念?我需要向另一个自定义类注入一个自定义服务(基本上是一个带有一些方法的类),我希望框架会自动实例化我的自定义服务,但是当我尝试使用它时,它是构造函数,而不是宾语。 由不必要的细节修剪的代码在这里:
自定义服务:
sap.ui.define([
"sap/ui/base/Object",
"ArA/model/productionOrdersDefinition/Order"
], function(Object, Order) {
"use strict";
return Object.extend("ArA.model.productionOrdersDefinition.InputProvider", {
constructor: function() {
},
onInit: function(){
this.order = new Order();
this.order.id = "0000133535";
// ...
},
getOrder: function(){
// ...
return this.order;
}
});
});
使用自定义服务的对象:
sap.ui.define([
"ArA/model/productionOrdersDefinition/BaseObject",
"ArA/model/productionOrdersDefinition/Order",
"ArA/model/productionOrdersDefinition/InputProvider"
], function(BaseObject, Order, InputProvider) {
"use strict";
return BaseObject.extend("ArA.model.productionOrdersDefinition.ManagerProgrammazione", {
constructor: function() {
BaseObject.call(this);
// this InputProvider is a constructor (method) and getOrder is not a function
var order = InputProvider.getOrder();
// ...
}
});
});
答案 0 :(得分:2)
看起来您尝试将经验和概念从Angular转移到UI5。但是以UI5世界设计的方式做得更好:)
有一个模型的概念,旨在基本上处理数据。您可以像创建自己的模型一样创建自己的模型 - 基础UI5对象的扩展或JSONModel。很可能你不会使用OData协议进行网络通信,因此你将把数据存储在JSONModel中。
在模型中声明特定于域的方法,并在控制器中直接或在应用程序的组件中实例化它们(如果您希望为所有控制器提供一种全局模型)。您可以通过getOwnerComponent方法从任何控制器获取组件实例。
组织数据模型的另一种方法是创建一种特殊的对象,称为" BO" - 业务对象,此BO将处理所有特定于域的事务(实例化所需的模型,进行网络连接,数据操作等)。因此,您需要在控制器中创建此BO,并在触发用户操作后从控制器调用所需的高级方法。
此外,您还必须在控制器或组件生命周期方法中销毁模型/ BO。
答案 1 :(得分:1)
只需在代码中添加实例化,它就应该开始工作了:
var this._oInputProvider = new InputProvider();
var order = this._oInputProvider.getOrder();