Угловой ленивый загрузочный модуль с подсостоянием NGXS - PullRequest
2 голосов
/ 09 мая 2019

У меня есть вопрос, касающийся модулей угловой характеристики с отложенной загрузкой, которые также являются подсостояниями состояния NGXS.

Например, у меня есть один родительский модуль и два дочерних модуля. Я хочу лениво загрузить эти два дочерних модуля. Мой магазин NGXS выглядит следующим образом:

{
  parent: {
    children1: {
      ...
    },
    children2: {
      ...
    }
  }
}

Поскольку состояние моего родительского модуля имеет следующий код, отложенная загрузка функционального модуля подуровня не работает с ошибкой, сообщающей, что дочернее состояние не найдено. Я не импортирую два дочерних модуля для отложенной загрузки.

@State<ParentModel>({
  ...
  children: [Child1State, Child2State]
})

Кто-нибудь знает, как справиться с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Я немного запутался с вашим вопросом, особенно с этим выражением:

модули отложенной загрузки с угловыми характеристиками, которые также являются подсостояниями состояния NGXS

Ленивые загруженные состояния и вложенные состояния - это совершенно разные вещи.Ленивые загруженные состояния объединяются с графом состояний на корневом уровне, в то время как вложенные состояния объединяются с родительским состоянием, к которому они принадлежат.

Ошибка Child state not found может быть выдана только в том случае, если вы не добавили состоянияк модулю, потому что NGXS пытается создать его экземпляр.Это также дает вам подсказку в конце You may have forgotten to add states to module.

Посмотрите на приведенный ниже код:

@State<Novel[]>({
  name: 'novels',
  defaults: []
})
export class NovelsState {}

@State({
  name: 'books',
  defaults: {
    mostPopularBooks: []
  },
  children: [NovelsState]
})
export class BooksState {}

@NgModule({
  imports: [
    CommonModule,
    NgxsModule.forFeature([BooksState, NovelsState])
  ]
})
export class BooksModule {}

BooksModule загружается через loadChildren где-то еще.

0 голосов
/ 14 мая 2019

Я не верю, что вы можете назначать состояния из лениво загруженных модулей непосредственно как дочерние элементы другого модуля.Эти состояния не будут существовать до тех пор, пока эти состояния модуля не будут находиться в нагрузках, что приведет к получаемой вами ошибке.

Вы должны иметь возможность создавать состояние объекта в лениво загруженном модуле, который расширяет родительское состояние.Это должно добавить новые загруженные состояния в существующую модель состояний.

См .: https://ngxs.gitbook.io/ngxs/advanced/lazy

...