UNPKG

ngx-dynamic

Version:

dynamic contents projection in Angular

71 lines (70 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var options_1 = require("./options"); function isBrowserPlatform() { return window != null && window.document != null; } var DynamicHTMLRenderer = (function () { function DynamicHTMLRenderer(options, cfr, injector) { var _this = this; this.options = options; this.cfr = cfr; this.injector = injector; this.componentFactories = new Map(); this.componentRefs = new Map(); this.options.components.forEach(function (_a) { var selector = _a.selector, component = _a.component; var cf; cf = _this.cfr.resolveComponentFactory(component); _this.componentFactories.set(selector, cf); }); } DynamicHTMLRenderer.prototype.renderInnerHTML = function (elementRef, html) { var _this = this; if (!isBrowserPlatform()) { throw new Error('dynamic-html supports only browser platform.'); } elementRef.nativeElement.innerHTML = html; var componentRefs = []; this.options.components.forEach(function (_a) { var selector = _a.selector; var elements = elementRef.nativeElement.querySelectorAll(selector); Array.prototype.forEach.call(elements, function (el) { var content = el.innerHTML; var cmpRef = _this.componentFactories.get(selector).create(_this.injector, [], el); // remove `ng-version` attribute el.removeAttribute('ng-version'); if (cmpRef.instance.dynamicOnMount) { var attrsMap_1 = new Map(); if (el.hasAttributes()) { Array.prototype.forEach.call(el.attributes, function (attr) { attrsMap_1.set(attr.name, attr.value); }); } cmpRef.instance.dynamicOnMount(attrsMap_1, content, el); } componentRefs.push(cmpRef); }); }); this.componentRefs.set(elementRef, componentRefs); return { check: function () { return componentRefs.forEach(function (ref) { return ref.changeDetectorRef.detectChanges(); }); }, destroy: function () { componentRefs.forEach(function (ref) { return ref.destroy(); }); _this.componentRefs.delete(elementRef); }, }; }; DynamicHTMLRenderer.decorators = [ { type: core_1.Injectable }, ]; /** @nocollapse */ DynamicHTMLRenderer.ctorParameters = function () { return [ { type: options_1.DynamicHTMLOptions, }, { type: core_1.ComponentFactoryResolver, }, { type: core_1.Injector, }, ]; }; return DynamicHTMLRenderer; }()); exports.DynamicHTMLRenderer = DynamicHTMLRenderer;