Значение переменной экземпляра компонента не обновляется внутри подписки Angular 7 - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь получить текущий и предыдущий URL-адрес компонента и обновить переменную компонента на основе URL-адреса. Когда я отлаживаю приложение, кажется, что значение компонентов обновляется, но на самом деле это не так.

Суть моего кода ниже:

dashboard.component.ts

show = true;
    constructor(private heroService: HeroService, private router: Router) {}
    ngOnInit() {
        this.getHeroes();
        this.router.events
        .pipe(
            filter(evt => evt instanceof NavigationEnd),
            pairwise(),
            take(1)
         )
         .subscribe((events: [NavigationEnd, NavigationEnd]) => {
         console.log("Prev", events[0].url);
         console.log("Cur", events[1].url);
         if (events[1].url === "/dashboard" && events[0].url === "/detail/12") {
             console.log("Came here");
              this.show = false;
         }
     });
}

dashboard.component. html

{{show}}

Пожалуйста, найдите пример стекаблица моего кода:

https://stackblitz.com/angular/qvvrbgrmmda?file=src%2Fapp%2Fdashboard%2Fdashboard.component.html

Шаги для воспроизведения: Перейдите на любую страницу героя, щелкнув по имени героя, и go вернитесь к компоненту панели мониторинга, нажав кнопку «Назад». Наблюдайте в консоли.

Примечание: Импорт игнорируется, все операторы импорта обрабатываются правильно

Ожидаемый результат: шаблон должен отображать «false» после обновления переменной компонента.

Фактический результат: шаблон показывает «true» без обновления переменной, даже если условие истинно.

Все мои услуги providedIn: 'root' и ChangeDetectionStrategy Default, но я не Не думаю, что это повлияет на что-либо.

Я пробовал changeDetector.detectChanges();, changeDetector.markForCheck(); и ngZone.run();. Но, похоже, ничего не работает. Пожалуйста, подскажите мне, что я делаю не так. Заранее спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...