Как исправить ошибку "this.accountService не определена" - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в Angular и JHipster. Пожалуйста, помогите решить проблему. Я не изменил код там. Для входа в систему используется код jhipster по умолчанию.

Трассировка стека:

TypeError: this.accountService не определено Трассировки стека: LoginService.prototype.logout@webpack-internal: ///./src/main/webapp/app/core/login/login.service.ts: 33: 9 NavbarComponent.prototype.logout@webpack-internal: ///./src/main/webapp/app/layouts/navbar/navbar.component.ts: 49: 9 View_NavbarComponent_30 / <@ng: ///NgrkAppModule/NavbarComponent.ngfactory.js: 1470: 23 </p>

ядро ​​/ Войти / login.service.ts:

import { AccountService } from 'app/core/auth/account.service';

--------------------------------------------------

constructor(private accountService: AccountService)

--------------------------------------------------

    login(credentials, callback?) {
        const cb = callback || function() {};

        return new Promise((resolve, reject) => {
            this.authServerProvider.login(credentials).subscribe(
                data => {
                    this.accountService.identity(true).then(account => {
                        resolve(data);
                    });
                    return cb();
                },
                err => {
                    this.logout();
                    reject(err);
                    return cb(err);
                }
            );
        });
    }


    logout() {
        this.authServerProvider.logout().subscribe();
        this.accountService.authenticate(null);
    }

ядро ​​/ Auth / account.service.ts:

export class AccountService {
--------------------------------

    authenticate() {
      some code;
    }

    identity() {
      some code;
    }

--------------------------------
}

Ответы [ 2 ]

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

Вы можете сохранить ссылку на это вне Promise и использовать ее вместо этого.

login(credentials, callback?) {
    let that = this;
    const cb = callback || function() {};

    return new Promise((resolve, reject) => {
        that.authServerProvider.login(credentials).subscribe(
            data => {
                that.accountService.identity(true).then(account => {
                    resolve(data);
                });
                return cb();
            },
            err => {
                that.logout();
                reject(err);
                return cb(err);
            }
        );
    });
}

Также добавьте @Injectable () в свой класс AccountService

 @Injectable()
export class AccountService
0 голосов
/ 08 мая 2019

Считывание чего-либо из this и определение его как undefined является распространенной проблемой, если this обрабатывается плохо.

Fix

Быстрое исправление - использовать стрелка для logout:

logout = () => {

И, вероятно, использовать его в другом месте (например, login), а также для будущей безопасности.

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