ngOnDestroy не стреляет при перезагрузке страницы - PullRequest
0 голосов
/ 08 июня 2018

Итак, я пытаюсь улучшить свои угловые навыки, и сейчас я работаю на форуме.

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

Я думал, что все это понял, когда добавиллогика плюс один для ngOnInit () и логика deduct-n для ngOnDestroy, но затем я заметил, что когда я обновил страницу с помощью f5, ngOndestroy () не сработал.Результатом является то, что он продолжает добавлять участников в число участников, даже если на страницу всегда смотрит один и тот же человек.

Как я могу убедиться, что счет вычитает единицу, когда человек переходит на другую часть моего SPA и когда он обновляет страницу?

Мой код:в ngOnDestroy я делаю запрос на сервер, чтобы вычесть один в базе данных, а затем отписаться от всех наблюдаемых в компоненте

export class ForumCountComponent implements OnInit, OnDestroy{

    data;
    ngUnsubscribe = new Subject();

    constructor(private authService: AuthenticationService, private forumService: ForumService){

    }

    ngOnInit(){
        let loggedIn = this.authService.isLoggedIn();

        this.forumService.forumCountPlus(loggedIn)
            .takeUntil(this.ngUnsubscribe)
            .subscribe((data) => {
                this.data = data;
                console.log(data);
            })
    }

    ngOnDestroy(){
        let loggedIn = this.authService.isLoggedIn();

        this.forumService.forumCountMin(loggedIn)
            .takeUntil(this.ngUnsubscribe)
            .subscribe((data) => {
                this.data = data;
                this.ngUnsubscribe.next();
                this.ngUnsubscribe.complete();
            })
    }

1 Ответ

0 голосов
/ 08 июня 2018

ngOnDestroy срабатывает только тогда, когда компонент разрушен внутри углового рабочего процесса.Однако обновление страницы находится за пределами рабочего процесса, поэтому этот метод не запускается.Для обработки действия, когда пользователь покидает / обновляет страницу, необходимо использовать onbeforeunload .

ngOnInit(){
    let loggedIn = this.authService.isLoggedIn();

    this.forumService.forumCountPlus(loggedIn)
        .takeUntil(this.ngUnsubscribe)
        .subscribe((data) => {
            this.data = data;
            console.log(data);
        })

    window.onbeforeunload = () => this.ngOnDestroy();
}

ngOnDestroy(){
    let loggedIn = this.authService.isLoggedIn();

    this.forumService.forumCountMin(loggedIn)
        .takeUntil(this.ngUnsubscribe)
        .subscribe((data) => {
            this.data = data;
            this.ngUnsubscribe.next();
            this.ngUnsubscribe.complete();
        })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...