ion-select не обновляется, когда находится внутри, тогда ng-содержимое пользовательского компонента
У меня есть ионная страница с ионным выбором внутри пользовательского компонента, который показывает себя, когда флаг isLoading
правда. Обратный вызов ion-change делает сетевой запрос с использованием Observable, первая операция обратного вызова - установка isLoading
признак истины
Когда запрос заканчивается isLoading
установлено значение false, но элемент ion-select не обновляется, я не понимаю, в чем проблема.
Ниже я показываю используемый код, сетевой вызов заменен на delay(), который воспроизводит ошибку
Это ошибка? Это угловая проблема? Проведя три дня без успеха, мне нужна помощь
Пользовательский компонент HTML
<div>
<div *ngIf="isLoading else theContent">
loading...
</div>
<ng-template #theContent>
<ng-content></ng-content>
</ng-template>
</div>
Пользовательский компонент машинопись
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-loading',
templateUrl: './loading.component.html',
styleUrls: ['./loading.component.scss']
})
export class LoadingComponent implements OnInit {
private _isLoading = false;
constructor() { }
ngOnInit() {
}
begin() {
this._isLoading = true;
}
end() {
this._isLoading = false;
}
get isLoading() {
return this._isLoading;
}
}
HTML-код страницы
<ion-content padding>
<app-loading>
<ion-select interface="popover" placeholder="select" [(ngModel)]="selected"
(ionChange)="change($event)">
<ion-select-option [value]="red">red</ion-select-option>
<ion-select-option [value]="blue">blue</ion-select-option>
<ion-select-option [value]="green">green</ion-select-option>
</ion-select>
</app-loading>
</ion-content>
Страница машинопись
import { Component, ViewChild } from '@angular/core';
import { LoadingComponent } from '../loading/loading.component';
import { empty, Observable, from, of } from 'rxjs';
import { switchMap, finalize, delay } from 'rxjs/operators';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
@ViewChild(LoadingComponent)
private loadingComponent: LoadingComponent;
selected: string;
change() {
this.loadingComponent.begin();
of(null).pipe(
delay(5000),
finalize(() => this.loadingComponent.end()),
).subscribe(v => console.log('done'));
}
}