# Dom Insertion (of Scripts and Styles) You can use the `DomInsertionService` in @abp/ng.core package in order to insert scripts and styles in an easy and explicit way. ## Getting Started You do not have to provide the `DomInsertionService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services. ```js import { DomInsertionService } from '@abp/ng.core'; @Component({ /* class metadata here */ }) class DemoComponent { constructor(private domInsertionService: DomInsertionService) {} } ``` ## Usage You can use the `insertContent` method of `DomInsertionService` to create a `` element will place at the **end** of `` and `scriptElement` will be an `HTMLScriptElement`. Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. > Important Note: `DomInsertionService` does not insert the same content twice. In order to add a content again, you first should remove the old content using `removeContent` method. ### How to Insert Styles If you pass a `StyleContentStrategy` instance as the first parameter of `insertContent` method, the `DomInsertionService` will create a `` element will place at the **end** of `` and `styleElement` will be an `HTMLStyleElement`. Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. > Important Note: `DomInsertionService` does not insert the same content twice. In order to add a content again, you first should remove the old content using `removeContent` method. ### How to Remove Inserted Scripts & Styles If you pass the inserted `HTMLScriptElement` or `HTMLStyleElement` element as the first parameter of `removeContent` method, the `DomInsertionService` will remove the given element. ```js import { DomInsertionService, CONTENT_STRATEGY } from '@abp/ng.core'; @Component({ /* class metadata here */ }) class DemoComponent { private styleElement: HTMLStyleElement; constructor(private domInsertionService: DomInsertionService) {} ngOnInit() { this.styleElement = this.domInsertionService.insertContent( CONTENT_STRATEGY.AppendStyleToHead('body {margin: 0;}') ); } ngOnDestroy() { this.domInsertionService.removeContent(this.styleElement); } } ``` In the example above, `` element **will be removed** from `` when the component is destroyed. ## API ### insertContent ```js insertContent( contentStrategy: ContentStrategy, ): T ``` - `contentStrategy` parameter is the primary focus here and is explained above. - returns `HTMLScriptElement` or `HTMLStyleElement` based on given strategy. ### removeContent ```js removeContent(element: HTMLScriptElement | HTMLStyleElement): void ``` - `element` parameter is the inserted `HTMLScriptElement` or `HTMLStyleElement` element, which was returned by `insertContent` method. ### has ```js has(content: string): boolean ``` The `has` method returns a boolean value that indicates the given content has already been added to the DOM or not. - `content` parameter is the content of the inserted `HTMLScriptElement` or `HTMLStyleElement` element. ## What's Next? - [ContentProjectionService](./Content-Projection-Service.md)