У меня есть компонент входа, который вызывается из нескольких мест и имеет вход для отображения его как модального или простого компонента.Angular2 - ngIf не перерисовывает дочерний компонент
LoginComponent:
declare var jQuery: any;
@Component({
selector: 'login-view',
templateUrl: '/login/index.html',
inputs: ['isOpenLoginModal']
})
export class LoginComponent extends BaseConfigurations {
public isOpenLoginModal: boolean;
//this method is called from ngOnInit in base class
public initialize() {
this.showModal();
}
constructor() {
super();
}
private showModal(): void {
if (this.isOpenLoginModal) {
jQuery("#loginComponentModal").modal('show');
}
}
}
Мой шаблон Логин/index.html содержит простую самозагрузку модальность.
Мой родительский компонент:
@Component({
selector: 'upcoming-auction-view',
templateUrl: '/auctions/upcoming-auctions.html'
})
export class UpcomingAuctionsComponent extends BaseConfigurations {
private showLoginModal: boolean = false;
public initialize() {
this.showLoginModal = false;
}
constructor() {
super();
}
submitBid(): void {
if (!this.isAuthenticated) {
//if user is not authenticated, show login component
this.showLoginModal = true;
}
}
}
Я разместил свой логин компонент в компоненте моего родителя, как:
<login-view *ngIf="showLoginModal === true" [isOpenLoginModal]="true"></login-view>
и есть кнопка, которая вызывает функцию submitBid и обновляет флаг
<input type="submit" class="form-submit primary-btn" value="Place Bid" (click)="submitBid()" />
Я обновляю 'showLoginModal' на основе аутентификации пользователя или n ot и иметь * ngЕсли повторно включить LoginComponent с модальной опцией. Я ожидаю, что угловой перерисовать, когда * ngIf будет обновлен и снова откроется модальный, но это не так. Он работает только один раз (даже если я сбросил showLoginModal на false, прежде чем устанавливать его в true).
Попробуйте ввести «cdRef: ChangeDetectorRef» и установите его «false», а затем «true» с вызовом change detection между такими, как 'this.showLoginModal = false; this.cdRef.detectChanges(); this.showLoginModal = true ; ' –
Вы пытались установить showLoginModal как PUBLIC? –
@federicoscamuzzi, устанавливая его для публики, не работал. –