Как внедрить сервисы в компоненты angular storybook?

Github: https://github.com/danielhdz56/storybook-demo.git

Внедрение службы в компонент всегда вызывает ошибку в сборнике рассказов:

Error: Can't resolve all parameters for CustomService: (?).

пример компонента:

 @Component({
   selector: 'app-custom-selector',
   templateUrl: './custom-selector.component.html',
   styleUrls: ['./custom-selector.component.scss'],
 })
 export class NavigationItemComponent {
   constructor(private customService: CustomService) {}
 }

2 ответа

Вам нужно добавить их в метаданные модуля

const modules = {
    imports: [..],
    providers: [CustomService],
    declarations: [NavigationItemComponent ]
};

// Then in stories: 
.add('description',
    () => ({
        component: NavigationItemComponent ,
        props: {...},
        moduleMetadata: modules
    }
)

Я решил это, используя собственный фабричный инициализатор для необходимой службы, когда не использовал дополнительный хост-компонент с помощьюAPP_INITIALIZERот@angular/core:

      import { APP_INITIALIZER } from '@angular/core';

function myServiceFactory(myService: MyService) {
  return () => myService;
}

const meta: Meta<MyCustomComponent> = {
  title: 'Components/Custom component',
  component: MyCustomComponent,
  argTypes: {
  },
  decorators: [
    moduleMetadata({
      imports: [
        BrowserAnimationsModule,
        BrowserModule,
        CommonModule,
      ],
      providers: [
        provide: APP_INITIALIZER,
        useFactory: myServiceFactory,
        deps: [MyService],
      ]
    }),
  ],
};
Другие вопросы по тегам