首页 > 解决方案 > 从 DataService Angular/TypeScript 中删除项目

问题描述

我正在尝试从我的 dataService 中删除一个项目,并更新所有组件但是我遇到了问题,无论我尝试什么,我都无法从 dataService 中删除该项目并更新正文组件。我在这里想念什么?我是否需要使用 body components 构造函数更改任何内容?谢谢你。

app.component.html

<app-header></app-header>
<app-footer></app-footer>
<app-body></app-body>

页脚.component.ts

import { DataService } from '../data.service';
nominations = [];
constructor(private dataService: DataService) {
    this.dataService.nominations$.subscribe(noms => this.nominations.push(noms));
    this.nominations.splice(0, 1);
  }
remove(indx: number){
    //remove movie from array in footer
    this.nominations.splice(indx, 1);
    //remove movie from dataService
    this.dataService.removeNomination(indx);
  }

数据服务.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  private nominations = new BehaviorSubject<any>([]);
  nominations$ = this.nominations.asObservable();

  constructor() { 
    this.addNominations(this.nominations);
  }

  getNominations(){
    return this.nominations;
  }

  addNominations(nom: Object){
    this.nominations.next(nom);
  }

  removeNomination(index: number){
    delete this.nominations$[index];   
  }

}

body.component.ts

constructor(private http: HttpClient, private dataService: DataService) {
    this.dataService.nominations.subscribe(noms => this.nominations.push(noms));
    this.nominations.splice(0, 1);
   }

标签: angulartypescriptcomponents

解决方案


你不需要提名$

数据服务.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  public nominations = new BehaviorSubject<any>([]);

  constructor() { 
    
  }

  setNominations(nom: Object){
    this.nominations.next(nom);
  }
}

页脚.component.ts

import { DataService } from '../data.service';
nominations = [];
constructor(private dataService: DataService) {
    this.dataService.nominations.subscribe(noms => this.nominations.push(noms));
  }
remove(indx: number){
    //remove movie from array in footer
    this.nominations.splice(indx, 1);
    //remove movie from dataService
    this.dataService.setNominations(this.nominations);
  }

然后,您订阅提名的每个地方都会获得拼接提名。


推荐阅读