【问题标题】:Angular2 - *ngIf and async observablesAngular2 - *ngIf 和异步 observables
【发布时间】:2016-11-05 10:36:46
【问题描述】:

我在使用带有可观察变量的 *ngIf 时遇到问题。问题是当我用 *ngIf 隐藏元素并再次显示它时,值不会加载:

        <div *ngIf="showDiv">
             {{ someObservable$ | async }}
        </div>

基本上当 showDiv 首先设置为 true 时,someObservable 会加载,但是当我将其设置为 false 然后再设置为 true strong> ,值不会加载。怎么了?

问候

【问题讨论】:

    标签: angular rxjs observable


    【解决方案1】:

    更新:

    感谢 j2L4e 的提示!

    BehaviorSubject是关键!

    看到这个笨蛋:

    https://plnkr.co/edit/whkrQk3tHCJCvvi6rlaE?p=info

    import {Component, NgModule} from '@angular/core'
    import {BrowserModule} from '@angular/platform-browser'
    
    import { Subject, BehaviorSubject } 'rxjs/Rx';
    //import { Observable, Subject } from 'rxjs';
    
    @Component({
      selector: 'my-app',
      template: `
        <div>
          <h2 (click)="showMe = !showMe">Hello {{name}}</h2>
          <br />
    
          <div *ngIf="showMe">
            sbj1: {{  _subj1 | async  }}
          </div>
    
          <div *ngIf="showMe">
            obs1: {{  _obs1 | async  }}
          </div>
    
          <div *ngIf="showMe">
            obs2: {{  _obs2 | async  }}
          </div>
        </div>
      `,
    })
    export class App {
    
      private showMe = false;
    
      private _subj1 = new BehaviorSubject<string>();
      private _subj2 = new Subject<string>();
      private _obs1 = this._subj1.asObservable();
      private _obs2 = this._subj2.asObservable();
    
      constructor() {
        this.name = 'Angular2'
    
        this._subj1.next('in constructor');
      }
    
      ngAfterViewInit() {
        this._subj2.next('after view init..');
      }
    }
    
    @NgModule({
      imports: [ BrowserModule ],
      declarations: [ App ],
      bootstrap: [ App ]
    })
    export class AppModule {}
    

    【讨论】:

    • BehaviorSubject 是您在这里需要的。它缓存单个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多