Здравсвуйте. Не могу понять почему при срабатывании makePushNotification() выполняется функция done() только в блоке else как нужно.
Функция done() меняет внешний вид компонента.
Если быть точнее, параметры компонента меняются (made), но отображение нет, т.е. чекбокс не меняется, текст не зачеркивается.
Но если вручную на чекбокс кликнуть, сначала made изменится на дефолтный, и со второго клика сработает как надо.
Как я понимаю, что то с отображением компонента не то, но не могу понять что конкретно
<mat-checkbox (change)="done()" [checked]="made">
<div *ngIf="made">Выполнено</div>
<div *ngIf="!made">В процессе</div>
</mat-checkbox>
<div class="text-wrapper">
<mat-card-title [ngClass]="{strike: made}">{{task.note}}</mat-card-title>
<div *ngIf="changeForm">
<input></input>
</div>
<mat-card-content [ngClass]="{strike: made}">{{task.date | date: "medium"}}</mat-card-content>
<div *ngIf="changeForm">
<input></input>
</div>
</div>
export class TaskCardComponent implements OnInit {
changeForm = false
made = false
done() {
this.made = !this.made
if (this.changeForm) {
this.changeForm = !this.changeForm
}
}
makePushNotification(pushNotifications, task) {
const eta_ms = new Date(task.date).getTime() - Date.now()
if (eta_ms > 0) {
const timeout = setTimeout(() => {
pushNotifications.create("Test", { body: task.note }).subscribe(
res => {
console.log(res)
this.done() /* тут не так работает */
},
err => console.log(err)
)
}, eta_ms)
timeout
} else {
this.done() /* тут срабатывает как надо*/
console.log(`The task ${task.note} is completed`)
}
}
constructor(
private pushNotifications: PushNotificationsService
) {}
ngOnInit() {
this.makePushNotification(this.pushNotifications, this.task)
}
}
Проблема решена
import { ChangeDetectorRef, ChangeDetectionStrategy } from "@angular/core"
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
...
})
export class TaskCardComponent implements OnInit {
...
constructor(
...
private ref: ChangeDetectorRef
) {}
makePushNotification(pushNotifications, task) {
const eta_ms = new Date(task.date).getTime() - Date.now()
if (eta_ms > 0) {
const timeout = setTimeout(() => {
pushNotifications.create("Test", { body: task.note }).subscribe(
res => {
console.log(res)
this.done()
this.ref.detectChanges()
console.log("this", this)
},
err => console.log(err)
)
}, eta_ms)
timeout
} else {
this.done()
console.log(`The task ${task.note} is completed`)
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существует объект, в котором в значениях лежат массивы с даннымиХочу, чтобы 1 массив ( priceCard ) собрал значения из других массивов с данными
Я создала галерею с изображениямиМне необходимо: 1) динамически создать элементы галереи по указанному шаблону; 2)При клике по элементу галереи...
Такие дела: есть сервер, к которому клиент подключается по адресу