如何使用 RouterLink 为模块配置故事书故事

Posted

技术标签:

【中文标题】如何使用 RouterLink 为模块配置故事书故事【英文标题】:How to configure storybook story for module with RouterLink 【发布时间】:2020-05-01 23:42:36 【问题描述】:

由于错误,无法为使用 routerLink 的模块配置故事

ERROR NullInjectorError: StaticInjectorError(DynamicModule)[RouterLinkActive -> Router]

复制 重现行为的步骤: demo-app 运行应用程序,您可以测试没有可能的解决方案来添加 RouterModule 来处理故事。 不能用RouterTestingModuleRouterModuleRouterModule.forRootiframe.html 路径配置它。缺少提供程序总是会出现同样的错误。

预期行为 使用 routerLink 运行应用程序和故事

附加上下文 最新版本的故事书5.3.3 和角度~8.2.14 我正在使用不同的配置 5.2.8,但没有出现此问题。

如何配置这个模块,storybook有问题吗?

Storybook issue

【问题讨论】:

您还在寻找这个问题的答案吗? Ling Vu 提出的答案对你有用吗? 有任何反馈吗?有用吗? 【参考方案1】:

Storybook 的工作方式与 Angular 不同,所以我不需要将 FeatureModule 注入故事中,Component 就可以了。当只有NavbarComponentRouterTestingModule 注入时

故事配置如下所示

storiesOf('Navbar', module)
  .addDecorator(
    moduleMetadata(
      imports: [BrowserAnimationsModule, RouterTestingModule],
      declarations: [NavbarComponent],
    ),
  )

而且你不需要路由配置 xD

【讨论】:

我仍然没有看到注入 RouterTestingModule 的意义,它应该用于单元测试和模拟路由,但如果它适合你也没关系。 这为所需指令提供了模拟,并且由于故事书的工作原理,它仅用于演示,因此不需要完整的 RouterModule【参考方案2】:

我做了以下更改:

    添加 RouterModule 包括 routes 数组(用于定义您的路线) 提供所需的 APP_BASE_HREF。

navbar.module.ts

const routes: Routes = [];


@NgModule(
  declarations: [NavbarComponent],
  imports: [
    CommonModule,
    RouterModule.forRoot(routes)
  ],
  providers: [provide: APP_BASE_HREF, useValue: '/'],
  exports: [NavbarComponent]
)
export class NavbarModule 

之后,您只需将<router-outlet></router-outlet> 添加到您的NavbarComponent

【讨论】:

这不解决问题,有同样的问题

以上是关于如何使用 RouterLink 为模块配置故事书故事的主要内容,如果未能解决你的问题,请参考以下文章

RouterLink 不会在单击时导航到组件,而是在加载同一模块中的其他组件后导航

无法绑定到“routerLink”,因为它不是“a”的已知属性。尽管引用了路由器模块,但仍然出错

故事书 6,使用模块路径?

[routerLink] 和 routerLink 的区别

如何解决 nrwl 故事书配置错误?

打字稿中的故事书配置