Każdy komponent stworzony przy użyciu Polymera jest zadeklarowany przy użyciu taga <dom-module></dom-module>
, posiada on co najmniej atrybut id
zawierający jego nazwę (nazewnictwo obowiązują te same restrykcje co przy tworzeniu zwykłego komponentu).
Dodatkowo musimy zarejestrować stworzony element. Możemy to zrobić przy pomocy prostego <script>Polymer({is: 'our-id'})</script>
.
Tak wygląda prosty, przykładowy webcomponent stworzony przy pomocy Polymera:
Jeżeli chcielibyśmy użyć go w kodzie, wystarczy zrobić to tak samo, jak przy zwykłym Web Componencie:
W efekcie otrzymamy dokument wyświetlający: Hello Web Components !
Aby wykorzystać treść HTML podaną przy użyciu Web Componentu używamy elementu
<content></content>
(wewnątrz template’a).
Polymer dostarcza nam kilka rzeczy:
- Zapewnia polyfill Shadow DOM w przeglądarkach, które go nie wspierają
- Dodaje sugar syntax, ułatwia pisanie komponentów
- Rozszerza możliwości które mamy w webcomponentach, np:
Dynamiczne renderowanie szablonów (np. atrybut repeat
bądź if
)
Zwróć uwagę na zagnieżdżone użycie elementu
template
z atrybutemis="dom-repeat"
.
Event mapping + Value Watching
Wewnątrz opcji prototypu możemy zadeklarować eventy, zwróć uwagę jak przekazywany jest trigger funkcji
clear
. Aby zaktualizować wartości naszych properties w rezultacie jakiejś akcji używamy zapisu_value::input
. Ten konkretny mówi, że do zmiennej_value
zostanie przypisana nowa wartość w reakcji na eventinput
.
Kiedy chcemy używać i obserwować prywatne property, jak w tym przypadku, dobrą praktyką jest poprzedanie ich nazw znakiem podkreślenia (
_value
).
Więcej lifecycle methods
Polymer dodaje 2 dodatkowe metody do lifecycle methods, oraz używa własnych nazw na poznane wcześniej metody webcomponentowe:
created
- aktywowany przy stworzeniy instancji (natywnie:createdCallback
)ready
- aktywowany gdy element jest w pełni przygotowany, tzn posiada Shadow DOM, podpięte eventListenery itp.attached
- aktywowany gdy dodamy instację do dokumentu (natywnie:attachedCallback
)detached
- aktywowany gdy usuniemy element z dokumentu (natywnie:detachedCallback
)attributeChanged
- atrybut elementu zmienił się, w polymerze mamy dostęp doChanged watchers
(przykład użycia możesz znaleźć nieco wyżej, podczas Event mappingu - funkcjaonValueChanged
) i jest to zalecana, jeśli możliwa do użycia droga. (natywnie:attributeChangedCallback
)
Wygodny node finding
Do wszystkich elementów HTML zawartych wewnątrz szablonu możemy odwołać się przy pomocy this.$
, gdzie po kropce możemy podać id elementu który chcemy znaleźć. Możemy również sprawdzać wartości elementu.
Dostęp przy pomocy
this.$
otrzymamy tylko do elementów które istnieją podczas inicjalizacji komponentu.
Są to przykładowe własności, które otrzymujemy wraz z Polymerem, kompletną dokumentację API można znaleźć pod tym linkiem.
Zadanie dla Ciebie
- Zaimplementuj komponent
play-button
za pomocądom-module
- Pytania?