Angular Storybook 组件是两个模块错误的一部分

For*_*man 6 typescript angular storybook

我正在使用 Storybook 测试一些共享组件上的 UI,并遇到一个错误,似乎 Storybook 正在将组件加载到 DynamicModule 中,导致以下错误:

Type DigFinderComponent is part of the declarations of 2 modules: DigFinderModule and DynamicModule! Please consider moving DigFinderComponent to a higher module that imports DigFinderModule and DynamicModule. You can also create a new NgModule that exports and includes DigFinderComponent then import that NgModule in DigFinderModule and DynamicModule.
Run Code Online (Sandbox Code Playgroud)

DigFinder 组件绝对只在其模块中声明:

Type DigFinderComponent is part of the declarations of 2 modules: DigFinderModule and DynamicModule! Please consider moving DigFinderComponent to a higher module that imports DigFinderModule and DynamicModule. You can also create a new NgModule that exports and includes DigFinderComponent then import that NgModule in DigFinderModule and DynamicModule.
Run Code Online (Sandbox Code Playgroud)

单元测试都通过了,但是当它被故事书渲染时出现这个错误:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DigFinderComponent } from './components/dig-finder/dig-finder.component';
import { DigFinderPanelComponent } from './components/dig-finder-panel/dig-finder-panel.component';
import { DigFinderNodeComponent } from './components/dig-finder-node/dig-finder-node.component';
import {DigUiModule} from '../dig-ui/dig-ui.module';
import {DigCardModule} from '../dig-card/dig-card.module';
import {DigContainerModule} from '../dig-container/dig-container.module';
import {DigBreadcrumbsModule} from '../dig-breadcrumbs/dig-breadcrumbs.module';
import {RouterModule} from '@angular/router';

@NgModule({
  declarations: [DigFinderComponent, DigFinderPanelComponent, DigFinderNodeComponent],
  imports: [
    CommonModule,
    DigBreadcrumbsModule,
    DigCardModule,
    DigContainerModule,
    DigUiModule,
    RouterModule
  ],
  exports: [
    DigFinderComponent
  ]
})
export class DigFinderModule { }
Run Code Online (Sandbox Code Playgroud)

Bre*_*dan 6

发生这种情况是因为您在componentStorybookadd方法中使用了prop 。我相信这就是它在 DynamicModule 中的结果,然后 moduleMetadata 的导入是第二种方式。

一种解决方案是按照您的回答进行操作:跳过导入模块并声明/导入您需要的模块位。另一种方法是使用template道具而不是component道具:

import {moduleMetadata, storiesOf} from '@storybook/angular';

import {withNotes} from '@storybook/addon-notes';
import {action} from '@storybook/addon-actions';
import {DigFinderModule} from '../../../src/modules/dig/dig-finder/dig-finder.module';
import {DigFinderComponent} from '../../../src/modules/dig/dig-finder/components/dig-finder/dig-finder.component';

const testData = [
  '/about',
  '/about/team',
  '/about/services',
]
storiesOf('DigFinder', module)
  .addDecorator(
    moduleMetadata({
      imports: [
        DigFinderModule,
      ]
    })
  )
  .add('Default', () => ({
    template: `
      <app-dig-finder
        [data]="data"
      ></app-dig-finder>
    `,
    props: {
      data: testData,
    }
  }));
Run Code Online (Sandbox Code Playgroud)

注意props这里还是需要的。


Deb*_*ahK 0

如果导入:

import {DigFinderComponent} from '../../../src/modules/dig/dig-finder/components/dig-finder/dig-finder.component';
Run Code Online (Sandbox Code Playgroud)

而是从模块导入?

import {DigFinderComponent} from '../../../src/modules/dig/dig-finder/dig-finder.module';
Run Code Online (Sandbox Code Playgroud)