В нескольких компонентах у меня одни и те же методы для пересчета стиля. Например, я использую HomeMainComponent
для отображения моей домашней страницы. Он вложен в MainComponent -> CoreComponent -> HomeComponent -> HomeMainComponent
:
import { Component, AfterViewInit } from '@angular/core';
@Component({
selector: 'main[app-home-main]',
templateUrl: './home-main.component.html',
styleUrls: ['home-main.component.scss'],
})
export class HomeMainComponent implements AfterViewInit {
mainSectionStyles = {};
constructor() {}
ngAfterViewInit() {
this.onInitAndOnResize(null);
}
onInitAndOnResize(e) {
const resultedStyles: any = {
'box-shadow': 'none',
'min-height.px': 0,
'padding-bottom.px': 0,
};
setTimeout(() => {
const navbar = document.getElementById('navbar');
const starsBlock = document.getElementById('stars');
resultedStyles.boxShadow = this.getBoxShadow();
let minHeight = this.getWindowHeigh();
if (navbar) {
minHeight = minHeight - navbar.offsetHeight;
}
if (starsBlock) {
resultedStyles['padding-bottom.px'] = starsBlock.offsetHeight;
}
resultedStyles['min-height.px'] = minHeight;
this.mainSectionStyles = Object.assign({}, resultedStyles);
}, 300);
}
private getWindowHeigh() {
return (
document.documentElement.clientHeight ||
window.innerHeight ||
document.body.clientHeight
);
}
private getBoxShadow() {
const windowWidth =
window.innerWidth ||
document.documentElement.clientWidth ||
document.body.clientWidth;
const shadowWidth = windowWidth / 3;
return 'inset 0 0 ' + shadowWidth + 'px rgba(0, 0, 0, 0.5)';
}
}
Как видите, я использую метод onInitAndOnResize
для пересчета стилей объекта, который я использую в ngStyle
. Также я скопировал эти методы для пяти других страниц в моем приложении. Я считаю, что я делаю неправильно, и есть более верный способ сделать это.