概要
- 今回はAngular+Storybookの
addon-controls
を使用したサンプルです。(2020/6/21時点ではβ版です)
addon-controls
は@Input値変更をStorybook上で確認できるようになります。
addon-docs
のインストールが必須になります。
- Angularで
addon-controls
を使用する場合は、compodoc でドキュメントを出力する必要があります。
github.com
- AngularでのStorybookの設定については以下の記事を参照ください。
kakkoyakakko2.hatenablog.com
kakkoyakakko2.hatenablog.com
実行環境
使用ライブラリ
- Angular - 9.1.x
- @compodoc/compodoc - 1.1.x
- @storybook/angular - 6.0.0-beta.31
- @storybook/addon-controls - 6.0.0-beta.31
- @storybook/addon-docs - 6.0.0-beta.31
src/app/custom-button.component.ts
import { Component, Input, EventEmitter, Output } from '@angular/core';
@Component({
selector: 'custom-button',
template: `<button (click)="onClick()">{{ label }}</button>`,
})
export class CustomButtonComponent {
@Input() label = 'button';
@Input() hige = 'a';
@Output() btnClick = new EventEmitter();
onClick(): void {
this.btnClick.emit();
}
}
src/app/custom-button.component.stories.ts
component
に対象のコンポーネントを指定します。
export const
で定義する箇所に引数がある関数を代入して、その引数(args)をprops
に設定します。
import { CustomButtonComponent } from './custom-button.component';
export default {
title: 'CustomButton',
component: CustomButtonComponent,
};
export const Basic = (args: any) => ({
component: CustomButtonComponent,
props: args,
});
Basic.args = { label: 'hoge' };
.storybook/main.js
addons
に @storybook/addon-docs
と @storybook/addon-controls
を追加します。
module.exports = {
stories: ['../src/**/*.stories.[tj]s'],
addons: [
'@storybook/addon-docs',
'@storybook/addon-controls',
]
};
documentation.json
はcompodocで出力したJSONファイルになります。
import { setCompodocJson } from '@storybook/addon-docs/angular';
import docJson from './documentation.json';
setCompodocJson(docJson);
.storybook/tsconfig.json
{
"extends": "../tsconfig.json",
"exclude": [
"../src/test.ts",
"../src/**/*.spec.ts",
],
"include": [
"../src/**/*",
]
}
実行
compodoc -p tsconfig.json -d ./docs -s
であらかじめcompodocのドキュメントを出力します。
start-storybook -p 8080
でstorybookを実行できます。(-p 8080
はポート番号)
http://localhost:8080/
にブラウザからアクセスすることで、Storybookの確認が出来ます。
github.com
おわりに
- Angularの場合、compodocの出力が必要なため若干面倒です。
- Input値を変更しながらコンポーネントごとの動作確認ができるためかなり便利です。