передача динамических данных во вложенные компоненты

у меня есть главная страница со списком заказов (компонент «список заказов»), каждый раз, когда я нажимаю заказ, я открываю компонент «детали заказа» через маршрутизатор-выход.

в компоненте сведений о заказе у меня есть в html селектор компонентов ('app-list-products'), в этом селекторе я хочу передать данные продуктов заказа ('order.products')

я использую управление состоянием NgRX и получаю данные заказа в компоненте list-orders в цикле OnInit. я делаю то же самое для компонента «детали заказа» (чтобы получить правильные детали заказа).

но каждый раз, когда я меняю порядок просмотра (выбирая из представления «список заказов»), продукты, которые я получаю, относятся к предыдущему порядку, который я хотел.

может кто-нибудь объяснить мне, почему это происходит? как я могу это исправить?

список-order.html:

<ul class="list-group" *ngIf="orders.length">
    <li
      class="list-group-item"
      *ngFor="let order of orders; let i=index">
      <a routerLink='{{i}}'>
        <p>Name: {{ order.name }}</p>
      </a>
    </li>
  </ul>

список-order.ts:

ngOnInit() {
    this.subscription = this.store.select('order')
      .pipe(map(orderState => {
        return orderState.orders;
      }))
      .subscribe(orders=> {
        this.orders = orders;
      });
  }

детали заказа.html:

<div class="row" *ngIf="order">
    <p>name: {{ order.name|| "------" }}</p>
    <app-list-products [orderProducts]="order.products"></app-list-products>
</div>

детали заказа.ts

order: Order = null;
ngOnInit() {
    let currUrl;
    this.routeSub = this.route.params.pipe(
      switchMap(() => {
        currUrl = this.route.snapshot['_routerState'].url.substring(1).split('/');
        return this.store.select('order')
       }))
      .subscribe(orderState => {
          this.order = orderState['order'][+currUrl[1]];
      });
  }


person guy    schedule 18.02.2020    source источник


Ответы (1)


с помощью и шагами в вопросах:

Как повторно визуализировать компонент вручную Angular 5

Есть ли способ Могу ли я передать динамические данные компоненту в Angular?

решение:

в details-order.ts я добавил:

private ref: ChangeDetectorRef в конструктор

и вызывается this.ref.detectChanges(); в конце метода подписки (после назначения 'this.order')

person guy    schedule 19.02.2020