如何根据值发出rxjs的变化

cph*_*pot 6 rxjs rxjs5

我可以让observable触发一次值.但是我希望每当变量的值发生变化时就会发生这种情况.实际上我需要一个观察者.这是我认为可观察的观点.观察事物的价值或状态并更新订阅它的任何内容.

无论如何,这是代码

import { Component, OnInit } from '@angular/core';

var Rx = require('rxjs/Rx');

import { Subject } from "rxjs/Rx";

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {

  private testBool: boolean = false;
  private observable;

  constructor() {  

    this.observable = Rx.Observable.of(this.testBool);

    this.observable.subscribe(
      (value) => console.log(value)
    )
  }

  toggleBool() {
    this.testBool = !this.testBool;

  }

}
Run Code Online (Sandbox Code Playgroud)

所以每当this.testBool的值发生变化时,我都希望订阅得到更新.在它的当前状态下,我得到一个控制台日志,然后什么也没有.我单击更新布尔值的按钮,但观察者订阅者再也不会触发.

我错过了一些关键点,这不是我应该如何使用它?

而且我知道我可以将观察者绑定到按钮单击,但这不是我想要实现的目的.这将是一个服务级别的例子.所以任何地方都可以更新价值.

我读过有关科目的内容,但我还在学习.那么也许我应该对此做些什么呢?

谢谢

Rob*_*hof 9

您想订阅并向observable发送新值.在这种情况下,你需要一个Subject.在这种情况下,我们使用BehaviorSubject,在BehaviorSubject中可以设置默认值.

import { Component, OnInit } from '@angular/core';

var Rx = require('rxjs/Rx');

import { BehaviorSubject} from "rxjs/Rx";

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {

  private testBool: boolean = false;
  private observable: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

  constructor() {  

    this.observable.subscribe(
      (value) => console.log(value)
    )
  }

  toggleBool() {
    this.testBool = !this.testBool;
    this.observable.next(this.testBool);

  }

}
Run Code Online (Sandbox Code Playgroud)