Как связаться с пользовательской панелью инструментов от регистрации компонента - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь создать пользовательскую панель инструментов, описанную этой документацией . Я хочу иметь возможность общаться между компонентом, который регистрирует ToolPanelComponent, и экземпляром компонента панели инструментов. Например, передать данные компоненту и прослушать события из компонента.

Я посмотрел в Интернете, но не могу найти похожий вопрос, и в документации, похоже, нет примера. Общий сервис будет работать, но мне интересно, есть ли более прямой метод.

У родительского компонента будет что-то похожее на этот код (из документации) для указания пользовательской панели инструментов на боковой панели.

    this.sideBar = {
      toolPanels: [
        {
          id: "customStats",
          labelDefault: "Custom Stats",
          labelKey: "customStats",
          iconKey: "custom-stats",
          toolPanel: "customStatsToolPanel"
        }
      ],

this.frameworkComponents = { customStatsToolPanel: CustomStatsToolPanel };

Но интерфейс для компонента

interface IToolPanel {

    // The init(params) method is called on the tool panel once upon component initialisation.
    init(params: IToolPanelParams): void;

    // Returns the GUI for this Tool Panel and can be a string of html or a DOM element.
    getGui(): any;

    // Can be left blank if no custom refresh logic is required.
    refresh(): void;
}

И IToolPanelParams имеет ссылку только на GridApi.

Было бы неплохо иметь возможность использовать функции angular @Input () и EventEmitter для связи между двумя компонентами.

1 Ответ

0 голосов
/ 08 апреля 2019

Вы можете достичь чего-то подобного, используя BehaviourSubject из rxjs.

Посмотрите на созданный мной план: Публикация событий из компонента Custom Stats в ag-grid

Нажмите на кнопку внутри пользовательского компонента панели инструментов и убедитесь, что значение оповещается от компонента, имеющего .

Что я делаю, так это присоединяю Observable типа *1020* к gridApi и подписываюсь на AppComponent.

(this.gridApi as any).myObsrvr = new BehaviorSubject();
(this.gridApi as any).myObsrvr.subscribe(value => {
  if (value != undefined) {
    alert(value);
  }
});

Теперь в компоненте CustomStatsToolPanel опубликуйте значение с помощью метода myObsrvr next (аналогично использованию EventEmitter), как только вы получите к нему доступ с помощью gridApi.

(this.params.api as any).myObsrvr.next(this.counter++);
...