Angular 2 - *ngif在从oberservable subscribe进行变量更新时不刷新

Boa*_*ler 14 javascript rxjs angular

在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>
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我从一个observable设置值时,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;
          }
    }
Run Code Online (Sandbox Code Playgroud)

有什么样的通知我必须触发?

Gün*_*uer 27

如果这可以解决您的问题,您可以尝试:

constructor(private cdRef:ChangeDetectorRef) {}

submitForm(){    
    this.service.createProject(this.model).subscribe(i=>{
        this.error=true;
        this.cdRef.detectChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果确实存在,那么会有一些代码this.service.createProject(this.model)导致执行离开Angulars区域.

更新

如果您()=>在任何地方使用而不是function ()并且如果您不仅仅通过名称传递函数,someFunc(mycallback)而是使用someFunc(() => mycallback())或传递函数,则不需要此someFunc(mycallback.bind(this))

  • 不会改变任何东西 (3认同)
  • 或者只使用`[新| Plunker中的V]`按钮.还有一个即用型Angular2 TS模板. (2认同)
  • 为什么我需要这个。我在任何地方都不需要它。我的意思是,它有效。但我为什么需要它? (2认同)