Angular 中的子组件在 Storybook 中无法识别,而与 ng serve 完美配合

Posted

技术标签:

【中文标题】Angular 中的子组件在 Storybook 中无法识别,而与 ng serve 完美配合【英文标题】:Child components in Angular not recognized in Storybook while working perfectly fine with ng serve 【发布时间】:2021-12-04 04:12:41 【问题描述】:

我正在使用 Storybook 在 Angular 中构建一些组件,这些组件到目前为止一直在工作。我刚刚来到一个组件,我在其中嵌套了另一个组件,并且它没有在 Storybook 中迭代。当我查看控制台时,我看到一个错误,告诉我确保将子组件添加到模块中,因为它无法识别它。关于检查我的代码,我挠了挠头,但找不到问题。我决定运行ng serve 并转到localhost://4200 看看会发生什么,一切都按预期工作,没有错误。我查看了 Storybook 网站上的文档,没有看到任何展示处理带有子组件的组件的特殊方法,所以我不明白发生了什么。这是我的一些代码,

子组件的模块

import  NgModule  from '@angular/core';
import  CommonModule  from '@angular/common';
import  BoxSizeVisualizerComponent  from './box-size-visualizer.component';



@NgModule(
  declarations: [BoxSizeVisualizerComponent],
  imports: [
    CommonModule
  ],
  exports:[CommonModule, BoxSizeVisualizerComponent],
  bootstrap:[BoxSizeVisualizerComponent]
)
export class BoxSizeVisualizerModule  

父组件的模块

import  NgModule  from '@angular/core';
import  CommonModule  from '@angular/common';
import  BoxSizeFrameComponent  from './box-size-frame.component';
import  BoxSizeVisualizerModule  from '../box-size-visualizer/box-size-visualizer.module';



@NgModule(
  declarations: [ BoxSizeFrameComponent],
  imports: [
    CommonModule,
    BoxSizeVisualizerModule
  ],
  exports:[CommonModule, BoxSizeVisualizerModule, BoxSizeFrameComponent],
  bootstrap:[BoxSizeFrameComponent]
)
export class BoxSizeFrameModule  

故事档案

import  Meta, Story  from "@storybook/angular/types-6-0";
import  boxSizeParams, boxSizeSize  from "../box-size-visualizer/box-size-visualizer.component";
import  BoxSizeFrameComponent  from "./box-size-frame.component";


export default
    title: 'Demo Frames/Box Size Frame',
    component: BoxSizeFrameComponent
 as Meta;

const Sizes: boxSizeParams[] = [*/a bunch of objects/*]

const Template: Story<BoxSizeFrameComponent> = (args:BoxSizeFrameComponent)=>(props:args);

export const Primary = Template.bind();

Primary.args = (Sizes:Sizes);

正如我之前所说,我在使用 ng serve 时没有任何问题,所以我只是在此处放置一些代码以符合标准,因此如果您需要查看其他内容,请告诉我,我会添加它。有谁知道问题出在哪里?

【问题讨论】:

【参考方案1】:

好的,有些东西告诉我要查看 Storybook 示例组件,我在 Header 中看到他们使用 Button 组件。在 Header 的故事中,我看到他们在默认导出中定义了一个 decorators 数组,如下所示

export default 
  title: 'Example/Header',
  component: Header,
  decorators: [
    moduleMetadata(
      declarations: [Button],
      imports: [CommonModule],
    ),
  ],
 as Meta;

所以我把我的代码修改成了这个

export default
    title: 'Demo Frames/Box Size Frame',
    component: BoxSizeFrameComponent,
    decorators: [
        moduleMetadata(
            imports:[CommonModule, BoxSizeVisualizerModule]
        )
    ]
 as Meta;

现在一切正常:)

【讨论】:

以上是关于Angular 中的子组件在 Storybook 中无法识别,而与 ng serve 完美配合的主要内容,如果未能解决你的问题,请参考以下文章

Angular 的 Storybook 不显示由 Kendo UI 创建的元素

Angular Storybook - 道具旋钮和 ng-content

Storybook Angular 和 ng-bootstrap

Storybook:在组件级别注入一个模拟的提供者/服务

构建 Angular 库后无法将 SCSS 与 Storybook 一起使用

使用 Angular 12 的 Storybook 中不再加载全局 SCSS 样式