ExpressionChangedAfterItHasBeenCheckedError с ngClass и без дочернего компонента - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь применить активный класс к моему маршруту, используя собственную логику, routerLinkActive по какой-то причине не работает (возможно, мой родительский и дочерний маршруты динамические).Вот код:

<ul class="navbar-nav">
   <li class="nav-item eds-service"
     *ngFor="let service of services"
     [routerLink]="['', _dataService.flavor, service]"
     [ngClass]="{'active': _urlService.getCurrentService() === service}"
     (click)="changeService(service)">
     {{ service | readableName | titlecase }}
   </li>
</ul>

Мой файл маршрутизации выглядит следующим образом:

{ path: ':flavor', component: ComparePageComponent },
{ path: ':flavor/:service', component: ComparePageComponent }

Когда я загружаю страницу, я получаю следующую ошибку:

ServicesComponent.html: 10 Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Выражение изменилось после его проверки.Предыдущее значение: 'active: false'.Текущее значение: 'active: true'.

Я пытался использовать AfterViewInit, AfterViewChecked, но безрезультатно.

Куда я иду не так?

1 Ответ

0 голосов
/ 10 мая 2019

Попробуйте это:

public constructor(private changeDetector: ChangeDetectorRef) {}

public ngAfterViewInit(): void {
    this.changeDetector.detectChanges();
}

Смотрите здесь: https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

...