Storybook是一种工具,可帮助您隔离开发和测试UI组件。它可以与任何框架一起使用,但特别适合角度应用。在此博客文章中,我们将向您展示如何设置Storybook版本7与Ionic Framework and Angular合作。
本博客文章假设您已经创建了您的离子框架角度项目。请参阅相关视频涵盖此博客文章here on YouTube
设置
在您的项目目录中运行下面的命令以在您的项目中设置故事书
npx storybook@latest init
现在,我们需要在项目根目录中修改angular.json
文件,以在项目书中为您的故事书故事创建的项目中包括资产,样式和离子图标。
"storybook": {
"builder": "@storybook/angular:start-storybook",
"options": {
"configDir": ".storybook",
"browserTarget": "app:build",
"compodoc": false,
"port": 6006,
"assets": [
{
"glob": "**/*",
"input": "src/assets",
"output": "assets"
},
{
"glob": "**/*.svg",
"input": "node_modules/ionicons/dist/ionicons/svg",
"output": "./svg"
}
],
"styles": [
"src/theme/variables.scss",
"src/global.scss"
]
}
},
成员卡组件
在my sample project中,我有一个称为MemberCard
的组件,我想为组件模板的代码创建一个故事
<div>
<ion-card>
<ion-card-header>
<ion-card-title>{{ memberInfo?.name }}</ion-card-title>
<ion-card-subtitle>
<span *ngIf="memberInfo?.companyName">{{ memberInfo?.companyName }} : </span>
{{ memberInfo?.title }}
</ion-card-subtitle>
</ion-card-header>
<ion-card-content>
<div>{{ memberInfo?.bio }}</div>
<ion-item lines="none" class="ion-float-right">
<ion-button
*ngIf="memberInfo?.linkedIn"
(click)="
onClick.emit({
event: 'social-clicked',
value: memberInfo?.linkedIn
})
"
><ion-icon icon="logo-linkedin" slot="start"></ion-icon
>LinkedIn</ion-button
>
<ion-button
*ngIf="memberInfo?.twitter"
(click)="
onClick.emit({
event: 'social-clicked',
value: memberInfo?.twitter
})
"
><ion-icon icon="logo-twitter" slot="start"></ion-icon
>Twitter</ion-button
>
<ion-button
*ngIf="memberInfo?.website"
(click)="
onClick.emit({
event: 'social-clicked',
value: memberInfo?.website
})
"
><ion-icon icon="globe" slot="start"></ion-icon>Web Site</ion-button
>
</ion-item>
</ion-card-content>
</ion-card>
</div>
这是组件的代码
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { globe as globeIcon } from 'ionicons/icons';
export interface MemberInfo {
name: string;
title: string;
companyName?: string;
bio: string;
twitter?: string;
linkedIn?: string;
website?: string;
}
@Component({
selector: 'app-member-card',
templateUrl: './member-card.component.html',
styleUrls: ['./member-card.component.scss'],
})
export class MemberCardComponent implements OnInit {
@Input() memberInfo!: MemberInfo;
@Output()
onClick = new EventEmitter<{ event: string; value: string | undefined }>();
constructor() {}
ngOnInit() {}
}
成员的故事
我通过复制样本Button.story
并进行适当的修改来创建我的故事。您可以在src\stories
目录中找到项目的故事。
首先,您需要导入组件,然后支持模块
import { MemberCardComponent } from 'src/app/member-card/member-card.component';
import { IonicModule } from '@ionic/angular';
import { importProvidersFrom } from '@angular/core';
然后,您需要使用导入的组件来设置故事。
-
title
已设置为设置,因此它将创建一个层次结构,其中Toplevel是项目和新故事MemberCardComponent
作为项目的孩子 -
component
是组件MemberCardComponent
的名称 -
render
将args
的类型设置为您的组件,这确保了您的组件中的属性在渲染时传递给故事 -
argTypes
-用户单击社交媒体按钮 时,
MemberCardComponent
发射和onClick
事件
decorators
属性是decorators
的数组,它将包裹故事。
-
applicationConfig
是我们导入故事所需模块的地方。 -
moduleMetadata
支持组件所需的其他模块信息 -
componentWrapperDecorator
包装了组件的渲染。在这种情况下,我将组件包装在IonApp
元素中
const meta: Meta<MemberCardComponent> = {
title: 'Project/MemberCardComponent',
component: MemberCardComponent,
tags: ['autodocs'],
render: (args: MemberCardComponent) => ({
props: {
...args,
},
}),
argTypes: { onClick: { action: 'clicked' } },
decorators: [
applicationConfig({
providers: [importProvidersFrom([IonicModule.forRoot()])],
}),
moduleMetadata({
declarations: [MemberCardComponent],
}),
componentWrapperDecorator((story) => `<ion-app>${story}</ion-app>`),
],
};
对于实际故事,您要做的就是为每个故事创建一个export
,命名并通过适当的论点。这是一个故事的示例
export const Primary: Story = {
args: {
memberInfo: {
name: 'Aaron Saunders',
title: 'CEO',
bio: 'Amazing Experience',
companyName: 'Clearly Innovative Inc',
linkedIn: 'Clearly Innovative Inc',
twitter: 'https://twitter.com/aaronksaunders',
website: 'www.clearlyinnovative.com',
},
},
};
查看丢失社交媒体属性时的组件UI是如何渲染的,我们有这个名为MissingSocial
的故事,您可以看到下面的代码
export const MissingSocial: Story = {
args: {
memberInfo: {
name: 'Aaron Saunders',
title: 'CEO',
companyName: 'Clearly Innovative Inc',
bio: 'No news',
website: 'www.clearlyinnovative.com',
},
},
};
跑步的故事书
npm run storybook
结论
在这篇博客文章中,我们向您展示了如何设置Storybook版本7,以使用离子框架和Angular。我们还向您展示了如何创建故事来测试您的UI组件。
通过遵循此博客文章中的步骤,您将可以使用故事书来提高角度应用程序的质量。
视频
项目源代码
aaronksaunders / storybookv7-ionic-angular
使用故事书V7与离子框架使用的简单演示
Simple Storybook v7 Angular Ionic Integration
Simple demonstration of using storybook v7 with ionic framework
Video
设置
在项目目录中
npx storybook@latest init
更改为angular.json
“ storybook” :{
“ builder” : “ Storybook “ ,
“ options” :{
“ configdir” : “ .storybook ” ,
“ browsertarget” : “ app:build “ ,
“ compodoc” : false ,
“ port” : 6006 ,
“资产” :[
{
在=“ pl-pds”>“ ,
“ input” : “ src/assets “ ,
在-pds“>”
},,
{
在SPAN类=“ PL-PDS”>“ ,
在/svg “ ,
在“ PL-PDS”>“
}
],,
“样式” :[
“ src/them them/tream/variables.scss “ ,,
在
这是给出的
}
},
对基本故事的具体更改,以支持Angular&Ionic Framework