检测Angular bound observable

时间:2018-05-29 01:46:39

标签: angular rxjs

这是对this question的重试,我想我错误地问了

我正在尝试检测订阅服务的组件所做的更改。组件文件是:

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

import {Item} from './app.module';
import { DataService } from './data.service';


@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
  items: Item[];

  constructor(
    public dataService: DataService
  ){

  }

  ngOnInit(){
    this.dataService.getItems().subscribe(items=>{
      this.items = items;
    });
  }
}

虽然service.ts是:

import { Injectable } from '@angular/core';
import { BehaviorSubject , Observable, of, throwError } from 'rxjs'

import { Item } from './app.module';

@Injectable()
export class DataService {
  private _items: BehaviorSubject<Item[]> = new BehaviorSubject([]);
  public readonly items$: Observable<Item[]> = this._items.asObservable();

  private first:boolean = true;

  constructor() {
    this._items.next([{name:'first',id:1},{name:'second',id:2}] as Item[]);
    this.monitorChanges();
  }

  getItems(): Observable <Item[]>{
    return this.items$;
  }

  monitorChanges(){
    this._items.subscribe(items => {
      console.log("_items updated");
    });
  }
}

如何实现monitorChanges(),以便在组件对其本地this.items进行更改时触发它?我打算使用该组件编辑项目,然后让服务同步更改服务器。谢谢!

现场示例位于Stackblitz

运行: Angular CLI:6.0.3 Angular:6.0.1 rxjs:6.1.0

~~~~~~~

我发现了我的无知 - 我的假设是.subscribe(x =&gt; this.x = x)创建了一个新的x副本,Angular神奇地跟踪了它。我希望有一些方法可以利用它来检测变化。这是不正确的。我的所有组件都在操作同一个对象,observable只传递引用。甚至是.pipe(map(...))的情况。

0 个答案:

没有答案