Как вызвать конструктор и ngOnInit после входа в систему - PullRequest
0 голосов
/ 28 апреля 2018

Я определяю маршрут '' для HomeComponent, на html-странице компонента есть ссылка для входа в систему, после login (), URL-адрес не изменяется, а конструктор и ngOnInit не вызываются, поэтому {{currentSubject ?. name}} пусто, тогда, если я нажму F5, чтобы обновить страницу, будет вызван ngOnInit, и {{currentSubject? .name}} будет показано на странице.

У меня такой вопрос: как я могу позвонить ngOnInit, чтобы сделать currentSubject.name показанным на странице после входа в систему?

HTML-страница, как показано ниже:

<div [ngSwitch]="isAuthenticated()">
	<div *ngSwitchCase="false" class="row">
		<div class="col-md-3">
			<span class="hipster img-fluid rounded"></span>
		</div>
	<div class="col-md-9">
			<div class="alert alert-warning">
				<span>existing account, please </span>
				<Button class="btn btn-primary" (click)="login()" jhiTranslate="global.messages.info.authenticated.link">login</Button>
			</div>
		</div>
	</div>
	<div *ngSwitchCase="true">
		<nav class="navbar navbar-expand-lg navbar-light bg-light">
			<div class="collapse navbar-collapse" id="navbarSupportedContent">
				<ul class="navbar-nav mr-auto">
					<li ngbDropdown class="nav-item dropdown">
						<a class="nav-link dropdown-toggle" ngbDropdownToggle href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
							{{currentSubject?.name}}
						</a>
						<div *ngIf="currentSubject" ngbDropdownMenu class="dropdown-menu" aria-labelledby="navbarDropdown">
							<a class="dropdown-item" *ngFor="let subject of subjects" href="#">{{subject.name}}</a>
						</div>
					</li>
				</ul>
				<ul class="navbar-nav">
					<li class="nav-item">
						<a class="nav-link" href="#">Link 1#</a>
					</li>
					<li class="nav-item">
						<a class="nav-link" href="#">Link 2#</a>
					</li>
				</ul>
			</div>
		</nav>
	</div>
</div>

ngOnInit () выглядит следующим образом:

    ngOnInit() {
        this.principal.identity().then((account) => {
            this.account = account;
        });
        this.registerAuthenticationSuccess();

        this.profileService.getProfileInfo().then((profileInfo) => {
            this.swaggerEnabled = profileInfo.swaggerEnabled;
        });

        this.subjectService.query({
            page: 0,
            size: this.itemsPerPage,
            sort: ['id', 'asc']
        }).subscribe(
            (res: ResponseWrapper) => this.onSuccess(res.json, res.headers),
            (res: ResponseWrapper) => this.onError(res.json)
        );
    }

Субъекты и currentSubject будут заполняться функцией onSuccess, которую я здесь пропускаю.

1 Ответ

0 голосов
/ 11 мая 2018

Вместо определения currentSubject.name в ngOnInit, сделайте это, подписавшись на успешное событие аутентификации, которое можно сделать с помощью eventManager

this.eventManager.subscribe('authenticationSuccess', (data) => {*code here*});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...