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;