Обнаружение изменений на наблюдаемой угловой границе - PullRequest
0 голосов
/ 29 мая 2018

Это повтор этого вопроса , который, я полагаю, я задал неправильно

Я пытаюсь обнаружить изменения, внесенные компонентом, подписанным на услугу.Файл компонента:

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

Запуск: угловой CLI: 6.0.3 угловой: 6.0.1 rxjs: 6.1.0

~~~~~~~

Я обнаружил свое невежество - Я действовал исходя из предположения, что .subscribe (x => this.x = x) создал новую копию xчто Angular магически отслеживается.Я надеялся, что есть какой-то способ использовать это, чтобы обнаружить изменения.Это неверноВсе мои компоненты манипулируют одним и тем же объектом, наблюдаемое просто передает ссылки.Это даже относится к .pipe (map (...)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...