ngx-cache-if
Version:
Angular *ngIf directive that cache content. *ngxCacheIf directive render content when needed and cache it for reuse.
81 lines (80 loc) • 6.07 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, Input, TemplateRef, ViewContainerRef, ElementRef, Renderer2, ComponentFactoryResolver } from '@angular/core';
export class NgxCacheIfDirective {
/**
* @param {?} templateRef
* @param {?} viewContainer
* @param {?} el
* @param {?} renderer
* @param {?} cfr
*/
constructor(templateRef, viewContainer, el, renderer, cfr) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.el = el;
this.renderer = renderer;
this.cfr = cfr;
this.loaded = {};
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (!this.loaded[this.templateRef.elementRef.nativeElement.nodeName]) {
if (changes["ngxCacheIf"].currentValue) {
this.viewContainer.clear();
this.loaded[this.templateRef.elementRef.nativeElement.nodeName] = this.viewContainer.createEmbeddedView(this.templateRef);
}
}
else {
try {
if (changes["ngxCacheIf"].currentValue) {
this.viewContainer.insert(this.loaded[this.templateRef.elementRef.nativeElement.nodeName]);
}
else {
this.viewContainer.detach();
}
}
catch (e) {
console.log(e);
}
}
}
}
NgxCacheIfDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngxCacheIf]'
},] },
];
/** @nocollapse */
NgxCacheIfDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: Renderer2 },
{ type: ComponentFactoryResolver }
];
NgxCacheIfDirective.propDecorators = {
ngxCacheIf: [{ type: Input }]
};
if (false) {
/** @type {?} */
NgxCacheIfDirective.prototype.ngxCacheIf;
/** @type {?} */
NgxCacheIfDirective.prototype.loaded;
/** @type {?} */
NgxCacheIfDirective.prototype.templateRef;
/** @type {?} */
NgxCacheIfDirective.prototype.viewContainer;
/** @type {?} */
NgxCacheIfDirective.prototype.el;
/** @type {?} */
NgxCacheIfDirective.prototype.renderer;
/** @type {?} */
NgxCacheIfDirective.prototype.cfr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNhY2hlLWlmLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jYWNoZS1pZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtY2FjaGUtaWYuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXpCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE1BQU07Ozs7Ozs7O0lBS0osWUFBb0IsV0FBNkIsRUFBVSxhQUErQixFQUN0RSxJQUF3QixRQUFtQixFQUMzQztRQUZBLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN0RSxPQUFFLEdBQUYsRUFBRTtRQUFzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQzNDLFFBQUcsR0FBSCxHQUFHO3NCQUp5QixFQUFFO0tBS2pEOzs7OztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRSxFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQVksWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDekg7U0FDSjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDO2dCQUNILEVBQUUsQ0FBQyxDQUFDLE9BQU8sZUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUM1RjtnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUM3QjthQUNGO1lBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQjtTQUNGO0tBQ0Y7OztZQTlCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7YUFDekI7Ozs7WUFWQyxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLFVBQVU7WUFDVixTQUFTO1lBQ1Qsd0JBQXdCOzs7eUJBU3ZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4Q2FjaGVJZl0nXG59KVxuZXhwb3J0IGNsYXNzIE5neENhY2hlSWZEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIG5neENhY2hlSWY6IGFueTtcbiAgbG9hZGVkOiB7W2tleTogc3RyaW5nXTogRW1iZWRkZWRWaWV3UmVmPGFueT59ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMubG9hZGVkW3RoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lXSkge1xuICAgICAgaWYgKGNoYW5nZXMubmd4Q2FjaGVJZi5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgIHRoaXMubG9hZGVkW3RoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lXSA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNoYW5nZXMubmd4Q2FjaGVJZi5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuaW5zZXJ0KHRoaXMubG9hZGVkW3RoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19