Должен ли угловой модуль быть пустым модулем JavaScript? - PullRequest
0 голосов
/ 03 ноября 2018

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

Итак, мне интересно, что:

  • Угловой модуль предназначен только статически для совместной настройки и организации связанных вещей?
  • Вовлечение кода динамической логики в угловой модуль, может быть, написано в конструкторе класса модуля, не является лучшей практикой?

1 Ответ

0 голосов
/ 05 ноября 2018

Я думаю, что основное отличие состоит в том, что компоненты, модули и сервисы Angular используют декораторы из пакета angular.

например. @Component() делает это:

 * Component decorator allows you to mark a class as an Angular component and provide additional
 * metadata that determines how the component should be processed, instantiated and used at
 * runtime.

Это прямо из исходного кода, который вы можете посмотреть.

То, что вы передаете этому, также довольно специфично для углов. Кроме этого, нет, не должно быть большой разницы.

Если вы взаимодействуете с компонентом, который требует инициализации, вы не должны использовать конструктор JS. Он будет выполняться немного раньше, чем ngOnInit, и может вызвать проблемы, так как работает angular.

Если вы пишете пользовательские модули, то, конечно, можете просто делать что-то обычным.

Способ инициализации модулей - это соглашение forRoot: Здесь вы в основном создаете синглтон с заданной конфигурацией: (взято по ссылке)

src / app / core / user.service.ts (конструктор)

constructor(@Optional() config: UserServiceConfig) {
  if (config) { this._userName = config.userName; }
}

src / app / core / core.module.ts (forRoot)

static forRoot(config: UserServiceConfig): ModuleWithProviders {
  return {
    ngModule: CoreModule,
    providers: [
      {provide: UserServiceConfig, useValue: config }
    ]
  };
}

src / app / app.module.ts (импорт)

import { CoreModule } from './core/core.module';
/* . . . */
@NgModule({
  imports: [
    BrowserModule,
    ContactModule,
    CoreModule.forRoot({userName: 'Miss Marple'}),
    AppRoutingModule
  ],
/* . . . */
})
export class AppModule { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...