управление состоянием с использованием ngrx / store и ngrx / effects в Angular 2

Я работаю над образцом приложения Angular 2 и планирую использовать @ ngrx / store и @ ngrx / effects для управления состоянием.

В этом примере приложения есть корневой модуль и несколько функциональных модулей.

Теперь мои вопросы.

  1. Могу ли я импортировать StoreModule и EffectsModule во все мои функциональные модули ИЛИ должны ли они быть импортированы только один раз в корневой модуль?

  2. Чтобы импортировать один файл эффектов в модуль, я написал ниже строку кода в файле модуля

    EffectsModule.run(AuthorEffects) 
    

    Что делать, если есть несколько файлов эффектов?


person refactor    schedule 17.02.2017    source источник


Ответы (2)


В большинстве случаев его следует импортировать в корневой модуль. Похоже, что у ngrx есть решение в бета-версии v3 для обеспечения функциональности динамического редуктора:

https://github.com/ngrx/store/pull/269

Что касается нескольких эффектов, вам нужно будет вызвать EffectsModule.run () для каждого эффекта.

person JusMalcolm    schedule 30.03.2017
comment
Например, у меня есть приложение, разделенное на модуль с несколькими функциями (по одному на страницу), и на каждой странице должны быть объявлены некоторые эффекты, если я добавлю на каждую страницу EffectsModule.run (AuthorEffects) и буду перемещаться между 3 страницами, службы эффектов останутся активными после того, как я покинуть страницу? - person Nicu; 08.05.2017
comment
Если у меня есть действие копирования, которое вызывает разные эффекты на разных страницах, действие копирования должно иметь другое имя на другой странице? Потому что, если служба не запускается после удаления страницы, я мог бы использовать одно и то же действие для разных эффектов. Я пытаюсь понять, как лучше всего создавать разные действия для каждой страницы или повторно использовать имена действий на разных страницах. - person Nicu; 08.05.2017
comment
Если вы предоставляете хранилище только в корневом модуле, вы должны зарегистрировать все эффекты там. - person JusMalcolm; 08.05.2017
comment
Похоже, ваша настоящая цель - разделить действия по страницам, в этом случае я думаю, что лучше всего создать разные действия (например, page1.copy, page2.copy) для каждого модуля. Вы можете получить доступ к состоянию из эффекта, чтобы проверить, какая страница активна, если вы действительно хотите использовать то же действие и тот же эффект, но я думаю, что лучше использовать отдельные действия. - person JusMalcolm; 08.05.2017
comment
Спасибо за ответ, кажется, есть несколько веб-сайтов с лучшими практиками для ngrx, используемых в больших приложениях, потому что это мой случай, и любая помощь полезна - person Nicu; 08.05.2017
comment
нет проблем. Также стоит присоединиться к сетке на gitter.im/ngrx/effects и задавать вопросы там. - person JusMalcolm; 08.05.2017

Очень хорошая практика - динамически импортировать функциональные модули в корневой модуль. Для этого можно использовать ForFeature. Ваше корневое хранилище пусто с нуля, и это очень хорошо для масштабирования вашего приложения.

Я рекомендую вам изучить этот официальный образец. Он может ответить на многие ваши вопросы.

Надеюсь, я вам помог.

person Max K    schedule 28.04.2018