Как вызвать событие всякий раз, когда `<my-view #>` активно (т.е. появляется в поле зрения)?

Используя Polymer Starter Kit в качестве примера, я хотел бы иметь разные <app-toolbar> в <my-app> (используя собственность headerType) на основе разных <my-view#>т.е.

<my-view1> => headerType = 'my-view1-header'
<my-view2> => headerType = 'my-view2-header'

В моем <my-app>Я создал собственность headerType и использовать <dom-if> показать / скрыть разные <app-toolbar>,

Мой вопрос в том, как бы я всегда запускал <my-app> и установить headerType = my-view#-header всякий раз, когда <my-view#> активен (т.е. появляется в поле зрения).

Я попробовал жизненный цикл полимера, такой как ready(), attached()и т.д., и я понимаю, что они запускаются только во время связанных с DOM событий.

2 ответа

Решение

Я в конечном итоге использую _pageChanged наблюдатель, чтобы вызвать функцию на <my-view#>, Ниже приведен фрагмент кода.

_pageChanged: function(page) {
  let onLoad = function () {
    let selected = this.$.ironpages.children[page];

    if (Object.getPrototypeOf(selected).hasOwnProperty('viewSelected')) {
      selected.viewSelected();
    }
  }

  // Load page import on demand. Show 404 page if fails
  var resolvedPageUrl = this.resolveUrl('my-' + page + '.html');
  this.importHref(resolvedPageUrl, onLoad, this._showPage404, true);
},

В шаблоне магазина Polymer есть пример, когда вы можете выполнить что-то, когда видимость вашего представления изменится на iron-pages,

вам просто нужно добавить свойство, например, видимое в каждом элементе вашего представления с логическим типом и наблюдать это свойство, чтобы проверить, является ли представление видимым или нет, а затем в вашем iron-pages вам нужно добавить свойство selected-attribute, и значение станет видимым. проверьте шаблон магазина полимеров.

Другие вопросы по тегам