angular - 类型 'Observable<Student[]>' 缺少类型 'Student' : id, 名字、姓氏、英语和其他 4 个属性的以下属性

标签 angular service crud

我创建了两个组件(表和表单),我希望在编辑时将数据从表单传输到表。我编写了以下引发错误的代码。请查看 it.console.log(val) 显示正确的值。我希望将其推送到数据数组中。我已经添加了表组件和服务

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { Student } from '../student';
import { StudentService } from '../student.service';


@Component({
  selector: 'app-table',
  templateUrl: './table.component.html',
  styleUrls: ['./table.component.css']
})
export class TableComponent implements OnInit {



  data: Student[] = [] 
  single!:Student;
  constructor(public service:StudentService) { }

  getUsers(){
    this.service.getStudents().subscribe((data:any) => {
      this.data=data;
    });
  }

  deleteUsers(id:number){
    this.data = this.service.delete(id,this.data);
  }

  update(id:number){
      this.service.update(id,this.data);
      this.service.currentData.subscribe((val) => {
        console.log(val)
        this.single = val;
        //this.data.push(val)
      });
      this.data.push({
        "English":this.single.English,
        "Hindi":this.single.Hindi,
        "Maths":this.single.Maths,
        "Science":this.single.Science,
        "SST":this.single.SST,
        "first_name":this.single.first_name,
        "last_name":this.single.last_name,
        "id":id
      });
  }


  ngOnInit(): void {
   this.getUsers();
  }

  ngOnDestroy(){
    if(this.service.getStudents().subscribe()){
        this.service.getStudents().subscribe().unsubscribe();
    }
  }

}

服务文件

import { Injectable } from '@angular/core';
import { Student } from './student';
import { HttpClient } from '@angular/common/http';
import { throwError } from 'rxjs/internal/observable/throwError';
import { EventEmitter } from 'stream';
import { Observable } from 'rxjs';
import { HttpErrorResponse } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { Router } from '@angular/router';
import { BehaviorSubject } from 'rxjs';



@Injectable({
  providedIn: 'root'
})
export class StudentService {


  users: Student[] = [];
  private data1 = new BehaviorSubject(this.getStudents())
  currentData = this.data1.asObservable();


  private url = '../../assets/MOCK_DATA.json'
  constructor(private http: HttpClient, private router: Router) { 
 }

   getStudents(): Observable<Student[]> {
    return this.http.get<Student[]>(`${this.url}`);
  }

  delete(id: number, data: Student[]): Student[] {
    data = data.filter(item => item.id !== id)
    return data;
  }

  update(id: number, data: Student[]): Student[] {
    data = data.filter(item => item.id != id)
    this.router.navigate(['/form']);
    return data
  }


  setData(data:any) {
    this.data1.next(data);
   } 
}

最佳答案

嗯,据我所知,您正在尝试将 Students[] 从 StudenService.currentData 推送到另一个 Students[],这是有意为之还是出了什么问题?

如果您想添加 StudentService.currentData 中的所有值,则可以尝试将 this.data.push(val) 更改为 this.data.push(...val)

关于angular - 类型 'Observable<Student[]>' 缺少类型 'Student' : id, 名字、姓氏、英语和其他 4 个属性的以下属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71692530/

相关文章:

angularjs - Angular.js 服务是单例还是每次都创建?

symfony - 如何解决 php app/console 中的 bundle 生成 :doctrine:crud

php - 有没有好的 PHP CRUD 代码生成器?

angular - 当前激活路由的 Observable?

html - Firefox 上的 Angular 不会调整 div 容器的大小

angular - 在Electron和Angular中使用SerialPort失败

angular - 使用 git 或 gitLab 的持续集成部署 Angular 应用程序

android - 即使应用程序关闭,也可以从后台服务更新 Activity 中的 textview

javascript - 使用 ES6 语法注册 AngularJS 服务

javascript - Vuejs : Passing SAVE function into CRUD component