通过Subject将数据从一个组件传递到另一个组件
通过Subject将数据从一个组件传递到另一个组件
我试图通过使用Subject和.pipe(take(1))将数据从updateproducts.component.ts传递到updatecardproducts.component.ts。
我遇到的问题是,当我点击父组件的编辑按钮时(它只是将我导航到更新产品组件),它确实将我带到了更新产品组件,但是在控制台中我第一次看不到任何内容,但是如果我再次点击,我就会得到结果,然后之后一切都正常工作,问题只存在于我第一次点击编辑按钮时。以下是代码:
updateproducts.component.ts
export class UpdateproductsComponent implements OnInit { recipeform:FormGroup id:number product editmode=false constructor(private route:ActivatedRoute,private router:Router,private prservice:Productservice) { } ngOnInit() { this.route.params.subscribe( (params)=>{ this.id=+params['id'] if(params['id']!=null){ this.editmode=true } this.initform() }) } private initform(){ let title='' let price='' let select='' let imageurl='' if(this.editmode){ const product=this.prservice.getproductbyid(this.id) title=product.title price=product.price select=product.select imageurl=product.imageurl this.prservice.updatedproduct.next(product) //这是我试图传递的值 } this.recipeform=new FormGroup({ 'title':new FormControl(title,Validators.required), 'price':new FormControl(price,Validators.required), 'select':new FormControl(select,Validators.required), 'imageurl':new FormControl(imageurl,Validators.required) }) } }
products.service.ts
import { Subject } from "rxjs"; export class Productservice{ updatedproduct=new Subject() card=new Subject () cards=[] addtocards(value){ this.cards.push(value) } getallproducts(){ return this.cards } getproductbyid(id){ return this.cards[id] } updateproduct(id,product){ return this.cards[id]=product } }
updateproducts.component.ts
export class UpdatecardproductsComponent implements OnInit { subscription:Subscription carddetails constructor(private prservice:Productservice) { } ngOnInit() { this.subscription=this.prservice.updatedproduct.pipe(take(1)) .subscribe( (value)=>{ this.carddetails=value console.log(this.carddetails) } ) } }
因此,首次渲染此组件时,我在控制台中看不到任何内容(this.carddetails),但之后从第二次开始,一切正常,并在控制台中显示。