Angular 2 - * ngif не обновляется при обновлении переменной из oberservable subscribe
в html у меня есть предупреждение должно отображаться только тогда, когда возникает состояние ошибки, как thius
<div class="alert alert-danger" *ngIf="error">
<strong>Not saved!</strong> There was an error when saving the project. Please try again later.
</div>
это прекрасно работает. но когда я устанавливаю значение из наблюдаемого, ngIf не получает обновленное значение.
здесь упрощенный код, который всегда устанавливает ошибку в true для целей тестирования
export class createProjectComponent {
constructor(private service:ProjectsService){
}
model = new myModel();
error = false;
submitForm(){
this.service.createProject(this.model).subscribe(i=>{
this.error=true;
}
}
есть ли какое-то уведомление, я должен вызвать?
2 ответов
вы можете попробовать, если это решает вашу проблему:
constructor(private cdRef:ChangeDetectorRef) {}
submitForm(){
this.service.createProject(this.model).subscribe(i=>{
this.error=true;
this.cdRef.detectChanges();
}
}
если это так, есть некоторый код в this.service.createProject(this.model)
это вызывает выполнение, покидающее зону Angulars.
обновление
вам это не нужно, если вы используете ()=>
везде вместо function ()
и если вы не передаете функции просто по имени, как someFunc(mycallback)
, а с someFunc(() => mycallback())
или someFunc(mycallback.bind(this))
нашли ошибку. the this
изменения . в наблюдении this
указывает на osbervable больше не на компонент.
поэтому я должен получить ссылку компонента на переменную и установить ошибку в этой ссылке на true.
рабочий код выглядит так:
var component = this;
this.service.createProject(this.model).subscribe(i=>{
component.error = true;