这是对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(...))的情况。