SAP UI5 里没有 @Directive 装饰器,但有一整套可组合的行为扩展机制

SAP UI5 里没有 @Directive 装饰器,但有一整套可组合的行为扩展机制
把问题放进一个正在开发的采购订单 Object Page 场景里会更容易看清。页面上有金额输入框、供应商状态、审批按钮和若干表格列,我们希望在金额超过信用额度时自动加上警示样式,希望输入框获得焦点时执行统一校验,希望某些字段按照权限动态隐藏,也希望把这套交互行为复用到其他页面。在 Angular 里,很自然的做法是写一个带有 @Directive 的类,再通过属性选择器把行为挂到宿主元素上。到了 SAP UI5,代码里找不到一个同名装饰器,也找不到可以直接写在 XML View 控件标签上的通用指令系统,但这些需求并没有失去实现路径,只是被拆分进了 UI5 的控件元数据、数据绑定、事件系统、控件继承、委托机制和扩展点体系中。答案可以直接落在一句话上,SAP UI5 没有与 Angular @Directive 一一对应的语言级或框架级构造,但 UI5 有多种机制分别覆盖属性指令、结构型指令和组件指令承担的职责。若只问有没有类似用法,答案是有,而且相似度在某些场景里很高。若问能不能像 Angular 那样声明一个 CSS 选择器,让框架扫描模板并自动为所有匹配元素实例化同一个行为类,答案是否定的。理解这层差异,后面的技术选择就会清楚很多。Angular 官方文档把指令分为三类,组件、属性指令和结构型指令。组件自身带模板,属性指令修改现有元素或组件的外观与行为,结构型指令通过增加或移除视图内容改变布局。@Directive 元数据还可以声明 selector、inputs、outputs、providers、host 和 hostDirectives,框架依据选择器匹配模板节点,并在变化检测过程中同步输入、宿主属性和事件。也就是说,Angular 指令是模板编译模型的一部分,不只是一个普通的事件处理工具。(