Angular EventEmitter не излучает в подписчике - PullRequest
1 голос
/ 09 мая 2020

У меня есть эмиттер событий, который я хочу передать объект родительскому компоненту, однако эмиттер событий не излучает в функции подписчика

Код


categories = [];

  @Output() filteredCategory = new EventEmitter<any>();
  @Output() maxiumPriceEmitter = new EventEmitter<any>();
  categorySub: Subscription;
  formatLabel(value: number) {
    return 'R' + value;
  }

  constructor(private shopService: ShopService) {}

  ngOnInit() {
    this.initCategories();
    this.filterCategories();
    this.updateCategories();
  }

filterCategories() {
    this.shopService.filterCategories.subscribe(
        (fCategory: string) => {
        this.categories.map(category => {
            category.checked = category.name === fCategory;
          });
        this.updateCategories();
        });
  }
  initCategories() {
    this.categories = [
      { name: 'dress', checked: true, displayName: 'Dresses' },
      { name: 'top', checked: true, displayName: 'Shirts' },
      { name: 'skirt', checked: true, displayName: 'Skirts/Pants' },
      { name: 'purse', checked: true, displayName: 'Purse' },
      { name: 'bag', checked: true, displayName: 'Bags' },
    ];

  }

  updateCategories() {
    const categories = this.categories
      .filter((category) => {
        return category.checked;
      });
    console.log(categories);
    this.filteredCategory.emit(categories);
  }

эмиттер событий излучает нормально за пределами подписчика, но когда он находится в подписчике, он не работает?

Код родительского шаблона

<app-filter-bar
(maxiumPriceEmitter) = 'updatedMaxiumPrice($event)'
(filteredCategory) = 'updateCategories($event)'

></app-filter-bar>

также я не вижу ошибок в консоли

1 Ответ

1 голос
/ 09 мая 2020

Одной из причин может быть this.shopService.filterCategories Observable / Subject выдает значение до того, как вы на него подпишетесь. Обходной путь для этого - изменение наблюдаемого на ReplaySubject / BehaviorSubject.

...