如何以编程方式实例化和应用指​​令?

How to instantiate and apply directives programmatically?

我知道在 ng2 中我们有 ComponentFactoryResolver 可以解析我们可以应用于 ViewContainerRef 的工厂。

但是,指令有类似的东西吗?一种实例化它们并将它们应用于组件的投影内容的方法?

不,不能动态添加或删除指令。它们仅适用于 HTML 静态添加到组件模板。

你可以做的是 enable/disable 通过向指令传递一个参数 (@Input()) 来通知它做某事或不做某事。

并非不可能。它只是丑陋且容易出错。要记住的基本事情是 指令首先是 class。如果您可以手动获取构造函数所需的东西,您可以简单地执行以下操作:

const highlight = new HighlightDirective(...);

为可能 运行 做出意想不到的行为做好准备,因为您将逃脱 Angular 的控制。

Read my full answer here 关于动态添加指令。