什么是更好的方法,以及如何实现将对象从一个嵌套组件发送到另一个嵌套组件

Roxy'Pro

我正在开发有关产品的简单应用程序,基本上,当用户选择产品时,应将其发送到另一个保存产品的组件。

产品一直被一个一个地选择,我从不发送清单逐项

因此,基本上,当我单击屏幕中间的任何产品(产品食物1,产品食物2,产品食物3)时,应将其发送到屏幕的右侧,该部分也是独立的组成部分。

所以我的中间部分看起来像这样:

<div *ngFor="let product of products;" class="product-holder">
  <div id="product.id" class="product" [style.background]="'url('+ product.imgUrl +')'">
    <p class="product-price">{{product.mpc | number}}</p>
    <p class="product-title">{{product.title}}</p>
  </div>
</div>

和一个打字稿代码:

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

  products: Article[];

  constructor(private _sharedService: SharedService) { }

  ngOnInit() {
    this._sharedService.getEventSubject().subscribe((param: any) => {
      if (param !== undefined) {
        this.theTargetMethod(param);
      }
    });
  }

  theTargetMethod(param) {
    // Here I am populating middle screen with products 
    this.products = param;
  }
}

现在,我将发布我应该接收产品的正确组件:

<div class="order-article">
  <div class="order-img"></div>
  <div class="order-title">
    <p>HERE I SHOULD WRITE ARTILE TITLE</p>
  </div>
  <div class="order-quantity pull-right">
    <span class="order-quantity-number">ARTICLE QUANTITY</span>
  </div>
</div>

export class ReceiptItemComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

因此,这个“正确”的组件应该从中间接收点击的产品,我不知道该怎么做,我@Input@Output装饰器以及services,我都在这里,我猜@input和@output是正确的解决方案,因为我正在发送一件一件?

但是我实际上不知道如何解决这个问题。

任何形式的帮助都会很棒

谢谢

在fjc帮助之后:

<div *ngFor="let product of products;" class="product-holder" (click)="addReceiptItem(article)">
  <div id="product.id" class="product" [style.background]="'url('+ product.imgUrl +')'">
    <p class="product-price">{{product.mpc | number}}</p>
    <p class="product-title">{{product.title}}</p>
  </div>
</div>

如您所见,

1.)我添加了addReceiptItem方法

2.)此方法接受单击的产品:

addReceiptItem(receiptItem: Product) {
    this._sharedService.addReceiptItem(receiptItem);
  }

3.)注入服务“ _sharedService”和在那里创建的方法也称为“ addReceiptItem”

4.)在我的服务中,我创建了BehaviorSubject这样的内容:private receiptItem = new BehaviorSubject<any>(undefined);

4)服务中的方法如下所示:

addReceiptItem(receiptItems: Product) {
    this.arr1.push(receiptItems);
    this.receiptItem.next(this.arr1);
  }

此方法将单击的项目推送到数组,该数组将发送到显示产品的组件

4.11)还添加了获取返回BehaviorSubject的数据的方法:

getReceiptItem(): BehaviorSubject<any> {
    return this.receiptItem;
  }

5)显示产品的已编辑组件(代码也已在执行任何操作之前发布-空的打字稿文件),现在看起来像这样:

export class ReceiptItemComponent implements OnInit {

  constructor(private _sharedService: SharedService) { }

  receiptItems: Product[];

  ngOnInit() {
    this._sharedService.getReceiptItem().subscribe(products => this.receiptItems = products);
  }

}

离开只是为了以某种方式破坏?

fjc

有两种策略可以解决此问题。总体而言,这是一个状态管理问题:多个组件正在一个联合状态下工作。

选项1:父组件管理状态

这可能是最简单的解决方案。

  • 包含所有其他组件的父组件具有选定产品的列表。
  • 让用户选择产品的子组件具有@Output()EventEmitter,该事件在用户选择产品时发出。父组件侦听该输出,并将发出的产品添加到其产品列表中。
  • 显示选定产品的子组件具有一个@Input()产品数组,基于它们显示产品。父组件将此输入设置为其产品列表。

选项2:国家服务

快速实施,但关注点的分离比#1更清晰。

  • 实现一个@Injectable StateService它具有a)​​一个BehaviorSubject<Product[]>带有产品列表的b)一种addProduct(product: Product)将产品添加到的当前值BehaviorSubject并发出它的方法。
  • 每个组件都使用该服务(constructor(stateService: StateService))。用户选择产品时,组件将调用this.stateService.addProduct(product)
  • 显示产品的组件会监听服务的产品列表中的更改:this.stateService.products.subscribe(products => this.products = products)并相应地显示产品。

选项3:使用状态存储库

使用诸如NGRX或Redux之类的东西来为您管理状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将状态从子组件发送到React中的另一个组件

如何使用意图将对象从一个Android活动发送到另一个?

如何从一个组件向另一个组件发送值?

Angular 2-通过路由器链接将对象从一个组件发送到另一个组件

将对象从一个std :: deque移到另一个的更好方法?

如何将道具从一个组件发送到渲染之外的另一个组件?

如何将一个对象从一个对象发送到另一个对象?

ReactJS-获取数据并发送到另一个组件的正确方法

如何访问在另一个组件中使用链接发送到的状态

如何将消耗的API响应发送到另一个组件?

将数据从一个组件推送到另一个组件

无法解决的错误将对象从一个活动发送到另一个活动

将对象的数组列表从一个活动发送到另一个活动

如何在角度2中单击按钮时将数据从一个组件发送到另一个组件

如何从一个组件到另一个组件重用方法

以角度 2 将整个对象从一个组件发送到另一个组件

从一个 Vue 组件发送到另一个组件的数据仍然是响应式的

使用路由将对象从一个组件传递到另一个组件

如何将对象从导入的包发送到另一个 Activity

在反应中将数据从一个组件发送到另一个组件

将 json 从一个组件发送到另一个组件,而不会在目标组件的 url 中看到

提交时:将数据从一个组件发送到另一个组件

React+ 将整个状态对象发送到另一个组件

如何将 React hook 的 setter 发送到另一个组件

如何在 Angular 中将数据从一个组件发送到另一个组件?

将对象(和子对象)从 Razor 页面发送到另一个页面

如何将数据类对象从一个模块发送到另一个模块?

如何以角度从一个组件调用另一个组件的方法

我如何将图像从一个角度组件发送到另一个并显示它