把 Angular 的动态组件思路带到 SAP UI5 项目时,最容易出现的误判,是把ViewContainerRef当成一个普通的页面容器,然后在 UI5 控件库里寻找同名或同层级的类。这样的类并不存在。SAP UI5 没有一个与@angular/core中ViewContainerRef完全一一对应的公开 API。真正接近的做法,是把几组机制组合起来使用,视觉内容由控件的 aggregation 承担,动态定义由Fragment或View承担,弹窗一类非内联对象由dependents承担,可复用应用单元由ComponentContainer承担,页面级装配则常由 Router 和 Targets 承担。
这个判断不能只看两边都能动态添加控件。Angular 官方把ViewContainerRef定义为可以挂接一个或多个 view 的容器。它有明确的 anchor element,挂接 view 的根节点会成为该锚点的同级节点。它还能暴露当前容器的Injector,并提供createEmbeddedView、createComponent、insert、move、remove、detach、clear、get和length等成套操作。Angular