Angular2-*ngIf和异步观测值

Angular2-*ngIf和异步观测值,angular,rxjs,observable,Angular,Rxjs,Observable,我对使用*ngIf处理可观察变量有问题。问题是,当我用*ngIf隐藏元素并再次显示它时,不会加载值,因此: <div *ngIf="showDiv"> {{ someObservable$ | async }} </div> {{someObservable$| async}} 基本上,当showDiv首先设置为true时,会加载一些可观察的值,但当我将其设置为false然后再次设置为true时,不会加载该值

我对使用*ngIf处理可观察变量有问题。问题是,当我用*ngIf隐藏元素并再次显示它时,不会加载值,因此:

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

{{someObservable$| async}}
基本上,当showDiv首先设置为true时,会加载一些可观察的值,但当我将其设置为false然后再次设置为true时,不会加载该值。怎么了

关于更新:

感谢j2L4e的提示


行为主体
是关键

请看这个plunker:

从'@angular/core'导入{Component,NgModule}
从“@angular/platform browser”导入{BrowserModule}
导入{Subject,BehaviorSubject}'rxjs/Rx';
//从“rxjs”导入{observeable,Subject};
@组成部分({
选择器:“我的应用程序”,
模板:`
你好{{name}

sbj1:{{{u subc1}异步} obs1:{{{u obs1 | async}} obs2:{{{u obs2 | async}} `, }) 导出类应用程序{ 私人showMe=假; private _subject1=新行为主体(); private_Subject 2=新主题(); private _obs1=这个; private _obs2=这个; 构造函数(){ this.name='Angular2' 这是1.next(“在构造函数中”); } ngAfterViewInit(){ 此._subject2.next('after view init..); } } @NGD模块({ 导入:[BrowserModule], 声明:[App], 引导:[应用程序] }) 导出类AppModule{}
行为主体
是您在此需要的。它缓存单个值。
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 {}