Я создал компонент для повторного использования вращающегося коврика из материала angular. Мне это нужно, чтобы не ставить для каждой страницы один и тот же код. Вот код, который работает:
<div id="overlayProgressSpinner">
<div class="center">
<mat-progress-spinner
style="margin:0 auto;"
mode="indeterminate"
diameter="100"
*ngIf="loading">
</mat-progress-spinner>
</div>
</div>
Это просто. Только для установки «загрузки» как истина или ложь. Что я сделал?
Я поместил код выше в пользовательский компонент. Теперь это выглядит так:
<app-progress-spinner></app-progress-spinner>
его код HTML такой же, а его код TS выглядит следующим образом:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-progress-spinner',
templateUrl: './progress-spinner.component.html',
styleUrls: ['./progress-spinner.component.scss']
})
export class ProgressSpinnerComponent implements OnInit {
loading = false;
constructor() { }
ngOnInit() {
}
public isLoading(value: boolean) {
this.loading = value;
}
public changeSpinnerCSSClass() {
const htmlDivElement = (window.document.getElementById('overlayProgressSpinner') as HTMLDivElement);
if (this.loading) {
htmlDivElement.className = 'overlay';
} else {
htmlDivElement.className = '';
}
}
}
, когда свойство "loading" принадлежит текущий компонент, я могу показать и скрыть компонент "mat-progress-spinner". В противном случае, когда он принадлежит «app-progress-spinner», он установлен, но не отображается. Код, который я пытаюсь сделать видимым, выглядит следующим образом:
this.progressSpinner.isLoading(false); // it is set, but it does not work.
this.progressSpinner.changeSpinnerCSSClass(); // it works
кажется, что * ngIf = "загрузка" не может быть установлена, используя подход, работающий, если логика c позади принадлежит текущий компонент.
Как этого добиться?