Диалоговое окно материалов сборника рассказов Angular

#angular #angular-material #storybook #angular-storybook #storybook-addon-specifications

#угловатый #угловой материал #сборник рассказов #угловой-сборник рассказов #сборник рассказов-аддон-технические характеристики #angular #angular-материал #angular-сборник рассказов #сборник рассказов-дополнение-технические характеристики

Вопрос:

Я пытаюсь использовать Angular с Storybook и открыть диалоговое окно mat с помощью кнопки.

 import { YesNoBoxComponent } from './yes-no-box.component';
import { withKnobs, button } from '@storybook/addon-knobs';
import { moduleMetadata } from '@storybook/angular';
import { MatDialog, MatDialogModule } from '@angular/material/dialog';

export default {
  title: 'YesNoBoxComponent',
  decorators: [
    withKnobs,
    moduleMetadata({
      imports: [MatDialogModule],
    })
  ],
};

export const Card = () => ({
  component: YesNoBoxComponent,
  props: {
    open: button('Has Close Button', () => {
      
      const dialogRef = this.dialog.open(YesNoBoxComponent, {
        width: '250px',
      });
    })
  },
});
  

Мне нужно добавить constructor(public dialog: MatDialog) {} , но я понятия не имею, куда поместить конструктор.
Я попытался создать новый экземпляр всего компонента в обратном вызове ручки, но безуспешно. Есть какие-нибудь идеи?

Ответ №1:

Не уверен, насколько важна часть с ручкой.

Это способ, который сработал для меня, хотя я не так хорошо знаком со Сборником рассказов, как некоторые люди.

Я создал фиктивный компонент там, в моей истории. Очевидно, что его можно извлечь в какое-то место, чтобы каким-то образом повторно использовать. А LaunchComponent — это компонент, который я затем использую в Сборнике рассказов.

Обратите внимание: MaterialProviders и PromptDialogComponent являются внутренними модулями и компонентами.

 @Component({
  template: `
    <button mat-flat-button (click)="launch()"> Launch </button>`
})
class LaunchComponent {
  constructor(private _dialog: MatDialog) {}

  public launch(): void {
    this._dialog.open(PromptDialogComponent);
  }
}

export const primary = () => ({
  moduleMetadata: {
    imports: [BrowserAnimationsModule, MatDialogModule, MaterialProviderModule],
    declarations: [LaunchComponent]
  },
  component: LaunchComponent
});
  

Кнопка запуска

Модальный