我试图通过服务通过Subject将数据从一个组件传递到另一个组件,但收到以下错误消息
类型“主题(任何)”上不存在属性“发射”。
这就是我尝试过的
component.ts文件
import { Component, OnInit } from '@angular/core';
import { Productservice } from 'src/app/services/products.service';
import { Router, ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-admin-products',
templateUrl: './admin-products.component.html',
styleUrls: ['./admin-products.component.scss']
})
export class AdminProductsComponent implements OnInit {
listofproducts
editedproduct
constructor(private prservice:Productservice,private
router:Router,private route:ActivatedRoute) {
}
ngOnInit() {
this.listofproducts=this.prservice.getallproducts()
}
onclickedit(id){
this.editedproduct=this.prservice.getspecificproduct(id)
this.prservice.editproduct.emit(this.editedproduct)
this.router.navigate(['edit',id],{relativeTo:this.route})
}
}
所以在这里发出它说类型'Subject(any)
上的属性'emit'不存在服务文件
import { Subject } from "rxjs";
import { Items } from "../home/header/admin-products/items.modal";
export class Productservice{
productcard=new Subject<any>()
editproduct=new Subject<any>()
getallproducts(){
return this.cards
}
getspecificproduct(id){
return this.cards[id]
}
}
这是我订阅的组件
import { Component, OnInit, Input } from '@angular/core';
import { Productservice } from 'src/app/services/products.service';
import { Router, ActivatedRoute } from '@angular/router';
import { take } from 'rxjs/operators';
@Component({
selector: 'app-edit-products',
templateUrl: './edit-products.component.html',
styleUrls: ['./edit-products.component.scss']
})
export class EditProductsComponent implements OnInit {
id:number
constructor(private prservice:Productservice,private
router:Router,private route:ActivatedRoute) { }
ngOnInit() {
this.route.params.subscribe(
(params)=>{
this.id=+params['id']
console.log(this.id)
}
)
this.prservice.editproduct.pipe(take(1)).subscribe(
(editproductdetails)=>{
console.log(editproductdetails)
}
)
}
}
答案 0 :(得分:2)
您应该通过 next 发出值,而不是发出。
更改此行:
this.prservice.editproduct.emit(this.editedproduct)
对此
this.prservice.editproduct.next(this.editedproduct)
答案 1 :(得分:1)
Subject是EventEmitter的父类。方法 emit 仅存在于EventEmitter类上,因此要解决此问题,请更改发射到下一个。