Как предоставить исходное состояние ngrx / data?

Я использую @ ngrx / data в приложении Angular 11, и я хочу предоставить исходное состояние своему Settings сущность, как вы можете сделать с @ ngrx / store с StoreModule.forRoot({}, {initialState: someInitialState}.

Как правильно указать начальное состояние для @ngrx/data сущности?

Спасибо!


person RcoderNY    schedule 05.02.2021    source источник


Ответы (1)


Используйте эффект или конструктор связанного модуля

export class DataModule {
  constructor(hero: HeroCollection, villain: VillainCollection, fight: FightCollection, store: Store) {
    hero.addManyToCache([]);
    villain.addManyToCache([]);
    fight.addManyToCache([]);
    // .....
  }
}
@Injectable()
export class EntityEffects {
  @Effect()
  public readonly data$ = this.actions$.pipe(
    ofType(ROOT_EFFECTS_INIT),
    // ....
  );
}
person satanTime    schedule 05.02.2021
comment
Благодарю за ваш ответ! Я думал, что ROOT_EFFECTS_INIT будет именно тем, что мне нужно, но, к сожалению, объекты @ ngrx / data еще не готовы, когда этот эффект начнется. У меня была такая же проблема с использованием конструкторов в других сервисах. Единственное безопасное место, которое я нашел, - это ngOnInit компонентов, но мне нужна услуга. Есть ли какой-то крючок в ngrx / data, чтобы сигнализировать, когда EntityCache готов к доступу? Спасибо! - person RcoderNY; 07.02.2021
comment
Почему они не готовы? Обычно эффект вызывается, когда все модули были инициализированы, кроме, конечно, отложенной загрузки. - person satanTime; 07.02.2021
comment
Я не совсем уверен. Я создал специальные службы данных для своих сущностей, поэтому я помещаю console.log в каждый из своих EntityCollectionDataService и могу видеть, как эффект вызывается в середине их конструируемых элементов. У меня есть 5 сущностей, и эффект вызывается после того, как построены службы данных 3 сущностей. Я внес только небольшие изменения в службы данных, ничего, что могло бы приблизиться к их замедлению, поэтому я не думаю, что это связано с этим. - person RcoderNY; 07.02.2021
comment
ты там подписки пользуешься? Я бы предположил, что они вызывают эту задержку, потому что redux / ngrx просты и должны быть инициализированы немедленно. Если бы вы могли привести пример stackblitz - было бы круто. Вот с чего вы можете начать: stackblitz.com/github/satanTime/ - person satanTime; 07.02.2021