привязка данных angular2 с использованием эталонных типов данных в службе

Итак, я недавно опубликовал привязку данных angular2 между свойствами сервиса и компонента и Тьерри указал на кое-что интересное.

Если у меня есть ссылочный тип данных, такой как массив или объект, хранящийся в службе (singelton), и я создаю ссылки в различных компонентах, указывающих на него, представление будет обновляться для всех компонентов при обновлении объекта из любого места (и это работает!).

В моем случае я создаю небольшой форум, на котором объекты потока необходимо будет отображать/просматривать в различных компонентах одновременно (например, предварительный просмотр, основной вид, панель инструментов...). Для обновления/редактирования текстовых полей это может быть очень удобно.

Теперь мне интересно, можно ли это использовать?


person Han Che    schedule 06.04.2016    source источник
comment
Если значения вашего текстового поля также хранятся в объектах (следовательно, хранятся в ссылочных типах), то да, их можно использовать безопасно. Если вы хотите использовать примитивные типы, см. ответ Тьерри. В поваренной книге также есть пример использования темы: angular.io/docs/ts/latest/cookbook/   -  person Mark Rajcok    schedule 06.04.2016


Ответы (1)


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

Что-то такое:

export class Service {
  name = "Luke";
  nameUpdated = new Subject();

  getName() {
    return this.name;
  }

  updateName() {
    this.name = 'Luke1';
    this.nameUpdated.next(this.name);
  }
}

и в компоненте:

this.name = this._service.name;
this._service.nameUpdated.subscribe(name => {
  this.name = name;
});

См. этот планкр: https://plnkr.co/edit/CRE92tdCsteoS2MVeGfh?p=preview

person Thierry Templier    schedule 06.04.2016
comment
то, что вы добавили сейчас, — это способ обновить представление для изменений типов данных примитивов в службе, верно? (я предполагаю, что новый предмет является наблюдаемым?). В любом случае спасибо за помощь! - person Han Che; 06.04.2016
comment
Фактически ваш компонент теперь уведомляется об обновлениях в службе и может соответствующим образом обновлять свойства, к которым привязано представление. Да, предметный класс наследует и Observable, и Observer... Добро пожаловать! - person Thierry Templier; 06.04.2016
comment
Мне определенно нужно больше узнать об наблюдаемых, но пока в основном вы можете найти информацию о rxJS и HTTP. У вас есть какой-нибудь совет, с чего начать? - person Han Che; 06.04.2016