Перейти к основному содержимому

Реактивность

По умолчанию всё, что возращается из Repository или Query не реактивно. В Angular и RxJS для достижения реактивности используются Observable и BehaviorSubject. Ключевой момент в получении реактивных данных - вызов обновления в конкретном инстансе вышеупомянутых классов. Интеграция с Rattus ORM предоставляет такую возможность автоматически.

В каждом репозитории, полученном из RattusContextService или Database, даже в тех, которые вы зарегистрировали в качестве кастомных, добавлен метод observe. Он принимает в себя один аргумент - функцию, единственный параметр которой - инстанс этого же репозитория. В ней вы можете как угодно обращаться к данным, в том числе с помощью Query. Она возвращает BehaviorSubject, автоматически подписанный на обновления хранилища конкретной модели.

public user: BehaviorSubject<Item<User>>

constructor(
  protected readonly contextService: RattusContextService,
) {
  const userRepo = contextService.getRepository(User)

  this.user = userRepo.observe(
    (repo) => repo.query()
      .where('id', '1')
      .first()
  )
}

Вы можете подписываться на изменения в коде, или выводить данные модели в шаблонах при помощи AsyncPipe:

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [AsyncPipe],
  template: '<p>{{ (user | async)?.email }}</p>',
})
export class AppComponent { 
  // ...
}

Полученный объект ничем не отличается от обычного BehaviorSubject, кроме того, что он автоматически обновляется при обновлении данных в хранилище.