ngx-element icon indicating copy to clipboard operation
ngx-element copied to clipboard

Check Platform before call `createCustomElement`

Open gogoout opened this issue 4 years ago • 1 comments

Including this library in a SSR project will break it. See https://github.com/angular/angular/issues/24551

The solution is quite simple, just check platform before call createCustomElement

ngx-element.module.ts https://github.com/brunob15/ngx-element/blob/master/projects/ngx-element/src/lib/ngx-element.module.ts

import { NgModule, Injector, ModuleWithProviders, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { NgxElementComponent } from './ngx-element.component';
import { LAZY_CMPS_PATH_TOKEN } from './tokens';

@NgModule({
	declarations: [NgxElementComponent],
	entryComponents: [NgxElementComponent]
})
export class NgxElementModule {

	constructor(private injector: Injector, @Inject(PLATFORM_ID) private platformId: string) {
                // conditional import angular/elements
		if (isPlatformBrowser(platformId)) {
			const { createCustomElement } = require('@angular/elements');
			const ngxElement = createCustomElement(NgxElementComponent, { injector });
			customElements.define('ngx-element', ngxElement);
		}
	}

	static forRoot(modulePaths: any[]): ModuleWithProviders<NgxElementModule> {
		return {
			ngModule: NgxElementModule,
			providers: [
				{
					provide: LAZY_CMPS_PATH_TOKEN,
					useValue: modulePaths
				}
			]
		};
	}

	ngDoBootstrap() {}
}

gogoout avatar Jul 16 '20 03:07 gogoout

LGTM

PatrickJS avatar Aug 09 '20 21:08 PatrickJS