Layanan Bersama Sudut - saat menambahkan item ke daftar, layanan bersama menggandakan data

Saya sedang belajar Angular dan membutuhkan bantuan Anda :).

Saya memiliki dua komponen item daftar dan item daftar.

  1. daftar-item menunjukkan daftar item
  2. list-item adalah menambahkan item daftar baru.

Saat saya menambahkan item daftar pada item daftar dan menavigasi kembali ke item daftar, daftar item layanan bersama memiliki item duplikat. Sederhananya, saat saya menambahkan satu item daftar, saya melihat beberapa item duplikat di layar item daftar. Tautan GitHub untuk contoh proyek yang mereplikasi masalah ini adalah @ https://github.com/ChathaKiran/AngularSharedServiceIssue. Di bawah ini adalah cuplikan kode saya. Tolong beri tahu saya bagaimana cara memastikan tidak ada duplikat.

Layanan bersama

export class AppService {
  private listItem = new BehaviorSubject(null);
  listItemObservable = this.listItem.asObservable();

  private listItems = new BehaviorSubject([] as string[]);
  listItemsObservable = this.listItems.asObservable();

  updateListItem(_listItem: string) {
    this.listItem.next(_listItem);
  }

  updateListItems(_listItems: string[]) {
    this.listItems.next(_listItems);
  }
}

Komponen Daftar Item

export class ListItemsComponent implements OnInit {
  _localListItems: string[];

  constructor(private appService: AppService){}

  ngOnInit(){
    this.appService.listItemsObservable.subscribe(_listItems => {
      this._localListItems = _listItems;
    });

    this.appService.listItemObservable.subscribe(_listItem => {
      if (_listItem != undefined) {
        var allItems = this._localListItems.concat(_listItem);
        this.appService.updateListItems(allItems);
      }
    });
  }
}

Daftar Item Komponen

export class ListItemComponent implements OnInit {

  listItemName: string;

  constructor(private maintenanceWindowService: AppService, private router: Router) { }

  ngOnInit() {}

  btnAddListItem(){
    this.maintenanceWindowService.updateListItem(this.listItemName);

    this.router.navigate(['list-items']);
  }
}

person Kiran Chatha    schedule 17.09.2020    source sumber


Jawaban (1)


Anda selalu harus berhenti berlangganan dari Observables Anda. Baca ini artikel dan perbarui kode Anda menggunakan ngOnDestroy, di mana Anda akan .unsubscribe() dari Observable Anda, atau menambahkan beberapa operator pipeable seperti .pipe(take(1)). Baca selengkapnya di sini Operator yang dapat dihubungkan

person Ihor Yanovchyk    schedule 17.09.2020
comment
Bingo. Itu memperbaiki masalahnya. Terima kasih banyak. - person Kiran Chatha; 17.09.2020