# ProjectionStrategy `ProjectionStrategy` 是@abp/ng.core包暴露出的抽象类. 有三种扩展它的投影策略: `ComponentProjectionStrategy`, `RootComponentProjectionStrategy` 和 `TemplateProjectionStrategy`. 它们实现相同的方法和属性,均可以帮助你定义内容投影的工作方式. ## ComponentProjectionStrategy `ComponentProjectionStrategy` 是扩展 `ProjectionStrategy` 的类. 它使你可以将**组件投影到容器中**. ### constructor ```js constructor( component: T, private containerStrategy: ContainerStrategy, private contextStrategy?: ContextStrategy, ) ``` - `component` 是你要投影的组件的类. - `containerStrategy` 是在投影组件时将使用的 `ContainerStrategy`. - `contextStrategy` 是将在投影组件上使用的 `ContextStrategy`. (默认值: None_) 请参阅[ContainerStrategy](./Container-Strategy.md)和[ContextStrategy](./Context-Strategy.md)文档以了解其用法. ### injectContent ```js injectContent(injector: Injector): ComponentRef ``` 该方法准备容器,解析组件,设置其上下文并将其投影到容器中. 它返回一个 `ComponentRef` 实例,你应该保留该实例以便以后清除投影的组件. ## RootComponentProjectionStrategy `RootComponentProjectionStrategy` 是扩展 `ProjectionStrategy` 的类. 它使你可以将**组件投影到文档中**,例如将其附加到 ``. ### constructor ```js constructor( component: T, private contextStrategy?: ContextStrategy, private domStrategy?: DomStrategy, ) ``` - `component` 是你要投影的组件的类. - `contextStrategy` 是将在投影组件上使用的 `ContextStrategy`. (默认值: None_) - `domStrategy` 是插入组件时将使用的 `DomStrategy`. (默认值: AppendToBody_) 请参阅[ContextStrategy](./Context-Strategy.md)和[DomStrategy](./Dom-Strategy.md)文档以了解其用法. ### injectContent ```js injectContent(injector: Injector): ComponentRef ``` 该方法解析组件,设置其上下文并将其投影到文档中. 它返回一个 `ComponentRef` 实例,你应该保留该实例以便以后清除投影的组件. ## TemplateProjectionStrategy `TemplateProjectionStrategy` 是扩展 `ProjectionStrategy` 的类.它使你可以将**模板投影到容器中**. ### constructor ```js constructor( template: T, private containerStrategy: ContainerStrategy, private contextStrategy?: ContextStrategy, ) ``` - `template` 是你要投影的 `TemplateRef`. - `containerStrategy` 是在投影组件时将使用的 `ContainerStrategy`. - `contextStrategy` 是将在投影组件上使用的 `ContextStrategy`. (默认值: None_) 请参阅[ContainerStrategy](./Container-Strategy.md)和[ContextStrategy](./Context-Strategy.md)文档以了解其用法. ### injectContent ```js injectContent(): EmbeddedViewRef ``` 该方法准备容器,并将模板及其定义的上下文一起投影到容器. 它返回一个 `EmbeddedViewRef` 实例,你应该保留该实例以便以后清除投影的模板. ## 预定义的投影策略 可以通过 `PROJECTION_STRATEGY` 常量访问预定义的投影策略. ### AppendComponentToBody ```js PROJECTION_STRATEGY.AppendComponentToBody( component: T, contextStrategy?: ComponentContextStrategy, ) ``` 将给定上下文设置到组件并将放置在文档中 `` 标签的**末尾**. ### AppendComponentToContainer ```js PROJECTION_STRATEGY.AppendComponentToContainer( component: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 将给定上下文设置到组件并将放置在容器的**末尾**. ### AppendTemplateToContainer ```js PROJECTION_STRATEGY.AppendTemplateToContainer( templateRef: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 将给定上下文设置到模板并将其放置在容器的**末尾**. ### PrependComponentToContainer ```js PROJECTION_STRATEGY.PrependComponentToContainer( component: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 将给定上下文设置到组件并将其放置在容器的**开头**. ### PrependTemplateToContainer ```js PROJECTION_STRATEGY.PrependTemplateToContainer( templateRef: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 将给定上下文设置到模板并将其放置在容器的**开头**. ### ProjectComponentToContainer ```js PROJECTION_STRATEGY.ProjectComponentToContainer( component: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 清除容器,将给定的上下文设置到组件并放在**已清除**的容器中. ### ProjectTemplateToContainer ```js PROJECTION_STRATEGY.ProjectTemplateToContainer( templateRef: T, containerRef: ViewContainerRef, contextStrategy?: ComponentContextStrategy, ) ``` 清除容器,将给定的上下文设置到模板并放在**已清除**的容器中. ## 另请参阅 - [DomInsertionService](./Dom-Insertion-Service.md)