该问题考虑了应在应用程序范围内编译组件的任何环境(依赖于平台的构建)。因此,该解决方案可能会从 Angular 2 测试中借用模拟技术,但应该应用于生产(包括 AoT)。
考虑到我们有一个现有的客户端浏览器应用程序,我们可能希望禁用其他平台上的某些组件的编译或完全覆盖这些组件(Angular Universal 服务器端渲染或移动应用程序)。
有些指令和组件不应该在其他平台上编译,因为它们是不可取的。IE
<client-side-only>fallback HTML contents</client-side-only>
应用程序初始化后应保持不变。
有必要涵盖两种情况:
- 防止指令/组件编译
- 使用具有相同选择器的替换或存根覆盖指令/组件
在 AngularJS 中,它就像有条件地向应用程序添加指令并在需要的地方使用它一样简单:
.directive('clientSideOnly', () => ({ terminal: true, priority: 10000 }));
或者使用装饰器修改定义的组件/指令的行为:
.decorator('clientSideOnlyComponentDirective', ($delegate) => ...));
Angular 2 中是否有这些 Angular 1.x 技巧的对应物?
如何以最少的 WET 代码覆盖或阻止在 Angular 2 中编译指令和组件?