NgRx Store не получает значений, когда компоненты из разных модулей - Angular - PullRequest
0 голосов
/ 25 октября 2019

Я работаю над угловым приложением, которое имеет следующую структуру модулей.

app.module.ts, и в этом модуле у меня есть еще два модуля с именами home.module.ts и admin.module.ts.

Я использую NgRx в своем приложении для управления состоянием. То, что я пытаюсь сделать, - это когда определенное событие происходит в компоненте в home.module.ts, тогда отправленное здесь действие должно быть отражено в app.module.ts или даже в модуле-родстве admin.module.ts. Диспетчеризация действий прекрасно работает между двумя компонентами одного и того же модуля (независимо от отношения родитель-потомок или потомок-родитель), но не при изменении модулей.

StoreModule уже включен в app.module.ts, я импортировал его в home.module.ts, но все еще безуспешно.

Мне нужна помощь по этому вопросу, спасибо.

Также обратите внимание, что магазин отлично работает среди компонентов одного и того же модуля. то есть действия отправляются, и даже другой компонент слушает их в это время.

Компонент 1 для действия отправки

import { Component, OnInit } from '@angular/core';
import { Store } from '@ngrx/store'
import { Test } from '../../../ngrx/models/test.model'
import * as TestActions from '../../../ngrx/actions/test.actions'

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

  constructor(
    public store: Store<Test[]>
  ) { }

  ngOnInit() {
  }

  addDataToStore(){
    console.log("Action Dispatched... [Add Test]")
    const data = {
      name : "Adnan Khan",
      email : "adnan@khan.com"
    }
    this.store.dispatch(new TestActions.TestAdd(data))
  }

}

Компонент 2 для отображения данных

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs'
import { Store } from '@ngrx/store'
import { Test } from '../../../ngrx/models/test.model'

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

  constructor(
    public store: Store<Test>
  ) { }

  storeData: Observable<Test[]>

  ngOnInit() {
    this.storeData = this.store.select('test')
  }

}

1 Ответ

0 голосов
/ 25 октября 2019

Отправленное действие будет передано каждому зарегистрированному редуктору. Если модуль A отправляет действие, редуктор в модуле B получит отправленное действие. Единственное обязательное условие - загружен модуль B.

Более подробная информация на Обмен данными между модулями - это арахис

...