Окна сообщений в приложениях Polymer

Я работаю над своим первым большим приложением Polymer, и в настоящее время у меня около 30 компонентов. Большинство компонентов должны отображать (модальные) окна сообщений. Для этого я реализовал диалоговое окно оберточной бумаги компонента сообщения (аналогично другим доступным компонентам окна сообщения).

Что мне не нравится, так это то, что в каждом компоненте, который хочет отображать окна сообщений, мне нужно определить элемент

<my-message-box id="message-box"></my-message-box>

а затем назвать это так

this.$["message-box"].information("Something happened...");

Это работает, но мое внутреннее чувство заключается в том, что окно сообщения должно быть больше похоже на глобальный сервис, возможно, на один. В C# fe существует статический метод класса MessageBox.

Является ли вышеуказанный механизм действительно рекомендуемым способом сделать это или есть лучшие решения для него?

1 ответ

Решение

Мой текущий подход заключается в создании error-dialog и добавить его как родного брата к моему main-app в index.html:

<body>
  <main-app></main-app>
  <error-dialog></error-dialog>
  <noscript>
    Please enable JavaScript to view this website.
  </noscript>
</body>

error-dialog"s ready() Метод добавляет пользовательское событие:

ready() {
  super.ready();
  this.addEventListener('o_error', e => this._errorListener(e));
}

_errorListener(e) {
  this.o_error = e.detail;
  this.$.errorDlog.open();
}

Теперь я могу открыть error-dialog откуда угодно

let msg = ...
const dlog = document.querySelector('error-dialog');
dlog.dispatchEvent(new CustomEvent('o_error', {detail: msg, bubbles: true, composed: true}));
Другие вопросы по тегам