3

Я новичок в Angular2 и изучаю, делая. Сейчас мне удалось создать одно из нескольких представлений с родительским компонентом, двумя дочерними компонентами и службой базы данных. Теперь я собираюсь перейти к реализации других представлений с их соответствующими родительско-дочерними компонентами.Angular2: Лучшая практика для уровня данных

Приложение должно использовать тот же набор данных, который может быть добавлен/обновлен/удален в других компонентах, поэтому я просматриваю отдельный слой данных, который может быть напрямую запрошен всеми компонентами приложения. Еще больше - мне нужен один и тот же экземпляр службы, так что промежуточные данные доступны повсюду и, кроме того, также избегают ненужных поездок в базу данных. Каков наилучший способ определить и использовать такой класс в Angular2?

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

а) Должен ли я работать с локальными переменными компонентов, которые являются копиями одних и тех же переменных слоев данных (при этом нагрузка, получать и устанавливать их в явном виде), как

this.locations = this.datalayer.locations; 
this.selectedLocation; 

updateLocation(id) { 
    this.selectedLocation = id; 
    this.datalayer.setSelectedLocation(id); 
} 

getSelectedLocation() { 
    return this.selectedLocation; 
} 

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

updateLocation(id) { 
    this.datalayer.selectedLocation = id; 
} 

getSelectedLocation() { 
    return this.datalayer.selectedLocation; 
} 

или, возможно, есть опция c?

ответ

6

Я предполагаю, что вы хотите получить сервис, доступный всем компонентам, целью которых является взаимодействие с данными.

Вы также нуждаетесь в услуге, которая является синглом.

Решение состоит в том, чтобы создать сервис и предоставить его на уровне приложения.

Смотреть еще:

How can I create a singleton service in Angular 2?

+0

Итак, чтобы уточнить: Я хотел бы импортировать db.service (который @Injectable) в app.module, включите его в массив провайдеров, а затем просто импортировать его снова любой другой компонент, который мне нужен, без включения его в массив поставщиков на уровне компонента, правильно? – pop

+0

Точно. Затем просто добавьте его в конструктор() 'каждого компонента. –

+0

Просто обратите внимание, что '@Injectable()' не имеет отношения. Он предназначен для инъекций зависимостей в декорированный класс, а не для инъекций. Если что-то не имеет аргументов конструктора, его не нужно украшать 'Injectable()' –

Смежные вопросы