Передача значения между двумя компонентами в angular2-метеорном проекте
Я использую angular2-метеор.
Когда я пытаюсь передать значение между двумя компонентами (когда значение изменяется в первом компоненте, создается событие во втором компоненте и используется это новое значение), у меня есть два способа прямо сейчас:
- Одним из способов является метеорный путь: использование
this.autorun
а такжеSession.get
, - Другой способ - это angular2: использование
Injectable
обслуживание сEventEmitter
,
Какой путь должен быть приоритетным? Или есть другой способ получше? Спасибо
2 ответа
Теперь я использовал angular2-meteor некоторое время.
Хотя в руководстве по angular2-meteor пока нет примеров использования или выбора службы Angular 2 или Meteor Session.
Но я чувствую, что angular 2 берет на себя инициативу в передней части, в то время как метеор облегчает реактивность, а также управляет всеми остальными.
Так что я пошел с angular2 путем использования сервиса для обмена между компонентами. И сервис очень мощный, как сказал @ todd-w-crone.
Если у кого-то есть лучший ответ, я переключусь, чтобы принять тот.
Я считаю целесообразным создать новый сервис под названием App.states.ts
который доступен глобально и имитирует сессию (получить / установить). Я обычно импортирую этот сервис во все необходимые компоненты, чтобы получить или установить новое значение, такое как User.status, company.profile, lastProduct и т. Д.
Так как этот сервис @injectable
он также может использовать другие сервисы, если значение еще не установлено. Это позволяет мне запрашивать переменную в компоненте appState.getLastModifiedItem()
, затем в app.states.ts
Я напишу эту функцию, чтобы передать this.modifiedItem
или другое:
- Запросить другую услугу
item.service.ts
получить данные - Вызовите другую функцию с
itemCollection.findOne({...})
и вернуть такое значение.
Вы можете настроить запросы Mongo по своему усмотрению и хранить статические данные в appState
или сохранить элементы подписки в appState.
Учтите, что все подписки, обрабатываемые @injectable внутри компонента, импортируются таким компонентом. Остерегайтесь конфликтующих подписок между компонентами / сервисами.