Polimer - elementy niestandardowe
Polymer to framework, który umożliwia tworzenie niestandardowych elementów przy użyciu standardowych elementów HTML. Niestandardowe elementy internetowe zapewniają następujące funkcje -
Zapewnia niestandardową nazwę elementu z klasą skojarzoną.
Gdy zmienisz stan wystąpienia elementu niestandardowego, zażąda on wywołania zwrotnego cyklu życia.
Jeśli zmienisz atrybuty w instancji, zostanie zażądane wywołanie zwrotne.
Możesz zdefiniować element niestandardowy za pomocą klasy ES6, a klasa może być skojarzona z elementem niestandardowym, jak pokazano w poniższym kodzie.
//ElementDemo class is extending the HTMLElement
class ElementDemo extends HTMLElement {
// code here
};
//link the new class with an element name
window.customElements.define('element-demo', ElementDemo);
Element niestandardowy może być używany jako element standardowy, jak pokazano poniżej -
<element-demo></element-demo>
Note - Nazwa elementu niestandardowego powinna zaczynać się od małej litery i zawierać myślnik między nazwami.
Cykl życia elementu niestandardowego
Niestandardowy cykl życia elementu zapewnia zestaw niestandardowych reakcji elementów, które są odpowiedzialne za zmianę cyklu życia elementu i są zdefiniowane w poniższej tabeli.
Sr.No. | Reakcje i opis |
---|---|
1 | constructor Podczas tworzenia elementu lub definiowania utworzonego wcześniej elementu ta reakcja elementu zostanie wywołana. |
2 | connectedCallback Po dodaniu elementu do dokumentu ta reakcja na element zostanie wywołana. |
3 | disconnectedCallback Kiedy usuniesz element z dokumentu, ta reakcja na element zostanie wywołana. |
4 | attributeChangedCallback Za każdym razem, gdy zmieniasz, dodajesz, usuwasz lub zastępujesz element w dokumencie, wywoływana jest ta reakcja elementu. |
Ulepszenia elementów
Możemy użyć elementów niestandardowych przed zdefiniowaniem ich przez specyfikację, a wszelkie istniejące instancje elementu zostaną zaktualizowane do klasy niestandardowej przez dodanie definicji do tego elementu.
Stan elementu niestandardowego zawiera następujące wartości -
uncustomized - Prawidłowa nazwa elementu niestandardowego to albo element wbudowany, albo nieznany element, który nie może stać się elementem niestandardowym.
undefined - Element może mieć prawidłową nazwę elementu niestandardowego, ale nie można go zdefiniować.
custom - Element może mieć prawidłową nazwę elementu niestandardowego, którą można zdefiniować i zaktualizować.
failed - Próba uaktualnienia uszkodzonego elementu nieprawidłowej klasy.
Definiowanie elementu
Element niestandardowy można zdefiniować, tworząc klasę rozszerzającą Polymer.Element i przekazującą tę klasę do metody customElements.define. Klasa zawiera metodę pobierającą, która zwraca nazwę znacznika HTML elementu niestandardowego. Na przykład -
//ElementDemo class is extending the Polymer.Element
class ElementDemo extends Polymer.Element {
static get is() { return 'element-demo'; }
static get properties() {
. . .
. . .
}
constructor(){
super();
. . .
. . .
}
. . .
. . .
}
//Associate the new class with an element name
window.customElements.define(ElementDemo.is, ElementDemo);
// create an instance with createElement
var el1 = document.createElement('element-demo');
Importy i interfejsy API
Elementy Polymer można zdefiniować, określając następujące trzy importy HTML -
polymer-element.html - Określa klasę bazową Polymer.Element.
legacy-element.html- Rozszerza Polymer.Element przy użyciu klasy bazowej Polymer.LegacyElement i dodaje starsze API zgodne z 1.x. Tworzy również elementy hybrydowe, definiując starszą metodę fabryki Polymer ().
polymer.html - Zawiera klasy bazowe Polymer wraz z elementami pomocniczymi, które zostały zawarte w 1.x polimer.html.
Zdefiniuj element w głównym dokumencie HTML
Możesz zdefiniować element w głównym dokumencie HTML za pomocą funkcji HTMLImports.whenReady ().
Przykład
Poniższy przykład pokazuje, jak zdefiniować element w głównym dokumencie HTML. Utwórz plik index.html i dodaj następujący kod.
<!doctype html>
<html lang = "en">
<head>
<title>Polymer Example</title>
<script src = "bower_components/webcomponentsjs/webcomponents-lite.js"></script>
<link rel = "import" href = "bower_components/polymer/polymer.html">
<link rel = "import" href = "define-element.html">
</head>
<body>
<define-element></define-element>
</body>
</html>
Teraz utwórz niestandardowy element o nazwie define-element.html i dołącz poniższy kod.
<dom-module id = "define-element">
<template>
<h2>Welcome to Tutorialspoint!!!</h2>
</template>
<script>
HTMLImports.whenReady(function(){
Polymer ({
is: "define-element"
})
})
</script>
</dom-module>
Wynik
Aby uruchomić aplikację, przejdź do utworzonego katalogu projektu i uruchom następujące polecenie.
polymer serve
Teraz otwórz przeglądarkę i przejdź do http://127.0.0.1:8081/. Poniżej będzie wynik.
Zdefiniuj starszy element
Wcześniejszy element może zostać użyty do zarejestrowania elementu za pomocą funkcji Polymer, która przyjmuje prototyp na nowy element. Prototyp powinien zawieraćis który definiuje nazwę tagu HTML dla elementu niestandardowego.
Przykład
//registering an element
ElementDemo = Polymer ({
is: 'element-demo',
//it is a legecy callback, called when the element has been created
created: function() {
this.textContent = 'Hello World!!!';
}
});
//'createElement' is used to create an instance
var myelement1 = document.createElement('element-demo');
//use the constructor create an instance
var myelement2 = new ElementDemo();
Wywołania zwrotne w cyklu życia
Wywołania zwrotne cyklu życia są używane do wykonywania zadań dla wbudowanych funkcji programu Polymer.Elementklasa. Polymer używa gotowego wywołania zwrotnego, które zostanie wywołane, gdy Polymer zakończy tworzenie i inicjalizację elementów DOM.
Poniżej znajduje się lista starszych wywołań zwrotnych w Polymer.js.
created - Jest wywoływana podczas tworzenia elementu przed ustawieniem wartości właściwości i zainicjowaniem lokalnego DOM.
ready - Jest wywoływana podczas tworzenia elementu po ustawieniu wartości właściwości i zainicjowaniu lokalnego DOM.
attached - Jest wywoływana po dołączeniu elementu do dokumentu i może być wywoływana więcej niż jeden raz przez cały okres istnienia elementu.
detached - Jest wywoływana po odłączeniu elementu od dokumentu i może być wywoływana więcej niż jeden raz przez cały okres istnienia elementu.
attributeChanged - Jest wywoływany, gdy występują zmiany w atrybutach elementu i przechowuje zmiany atrybutów, które nie są zgodne z zadeklarowanymi właściwościami.
Deklarowanie właściwości
Właściwości można zadeklarować w elemencie w celu dodania wartości domyślnej i innych specyficznych funkcji w systemie danych i można ich użyć do określenia następujących funkcji -
Określa typ właściwości i wartość domyślną.
Wywołuje metodę obserwatora, gdy nastąpią zmiany wartości właściwości.
Określa stan tylko do odczytu, aby zatrzymać nieoczekiwane zmiany wartości właściwości.
Zapewnia obsługę dwukierunkowego wiązania danych, które wyzwala zdarzenie po zmianie wartości właściwości.
Jest to właściwość obliczeniowa, która oblicza wartość dynamicznie w zależności od innych właściwości.
Aktualizuje i odzwierciedla odpowiednią wartość atrybutu, gdy zmieniasz wartości właściwości.
W poniższej tabeli przedstawiono klucze dla każdej właściwości, które są obsługiwane przez obiekt właściwości.
Sr.No. | Klucz i opis | Rodzaj |
---|---|---|
1 | type Deserializacji z atrybutu, którego typ właściwości jest określany przy użyciu konstruktora typu. |
konstruktor (Boolean, Date, Number, String, Array or Object) |
2 | value Określa domyślną wartość właściwości, a jeśli jest to funkcja, używa wartości zwracanej jako wartości domyślnej właściwości. |
wartość logiczna, liczba, ciąg lub funkcja. |
3 | reflectToAttribute Jeśli ten klucz ma wartość true, ustawia odpowiedni atrybut w węźle hosta. Atrybut można utworzyć jako standardowy atrybut logiczny HTML, jeśli ustawisz wartość właściwości jako Boolean. |
boolean |
4 | readOnly Nie można ustawić właściwości bezpośrednio przez przypisanie lub powiązanie danych, jeśli ten klucz ma wartość true. |
boolean |
5 | notify Możesz użyć właściwości do dwukierunkowego powiązania danych, jeśli ten klucz jest ustawiony na true, a po zmianie właściwości zostanie wyzwolone zdarzenie nazwa-właściwości-zmiana. |
boolean |
6 | computed Możesz obliczyć wartość argumentu za każdym razem, gdy się zmieni, wywołując metodę, a wartość zostanie uproszczona jako nazwa metody i lista argumentów. |
strunowy |
7 | observer Wywołaj nazwę metody, która jest uproszczona przez wartość, gdy zmienia się wartość właściwości. |
strunowy |
Deserializacja atrybutów
Deserializuj nazwę właściwości, która pasuje do atrybutu w instancji zgodnie z określonym typem i tą samą nazwą właściwości w instancji elementu, jeśli właściwość jest skonfigurowana w obiekcie właściwości.
Możesz ustawić określony typ bezpośrednio jako wartość właściwości, jeśli nie ma innych opcji właściwości zdefiniowanych w obiekcie properties; w przeciwnym razie dostarczy wartość do klucza typu w obiekcie konfiguracyjnym właściwości.
Konfigurowanie właściwości logicznych
Właściwość Boolean można skonfigurować na podstawie znaczników, ustawiając ją na false, a jeśli jest ustawiona na true, nie można skonfigurować na podstawie znaczników, ponieważ atrybut z wartością lub bez jest zrównany z wartością true. Dlatego jest znane jako standardowe zachowanie atrybutów na platformie internetowej.
Właściwości obiektu i tablicy można skonfigurować, przekazując je w formacie JSON jako -
<element-demo player = '{ "name": "Sachin", "country": "India" }'></element-demo>
Konfigurowanie domyślnych wartości właściwości
Właściwość domyślną można skonfigurować za pomocą pola wartości w obiekcie właściwości i może to być wartość pierwotna lub funkcja zwracająca wartość.
Przykład
Poniższy przykład przedstawia sposób konfigurowania domyślnych wartości właściwości w obiekcie properties.
<link rel = "import" href = "../../bower_components/polymer/polymer-element.html">
//it specifies the start of an element's local DOM
<dom-module id="polymer-app">
<template>
<style>
:host {
color:#33ACC9;
}
</style>
<h2>Hello...[[myval]]!</h2>
</template>
<script>
//cusom element extending the Polymer.Element class
class PolymerApp extends Polymer.Element {
static get is() { return 'polymer-app'; }
static get properties() {
return {
myval: {
type: String,
//displaying this value on screen
value: 'Welcome to Tutorialspoint;!!!'
},
data: {
type: Object,
notify: true,
value: function() { return {}; }
}
}
}
}
window.customElements.define(PolymerApp.is, PolymerApp);
</script>
</dom-module>
Wynik
Uruchom aplikację, jak pokazano w poprzednim przykładzie, i przejdź do http://127.0.0.1:8000/. Poniżej będzie wynik.
Właściwości tylko do odczytu
Możesz uniknąć nieoczekiwanych zmian w generowanych danych, ustawiając flagę readOnly na true w obiekcie properties. Element używa metody ustawiającej konwencję _setProperty (wartość), aby zmienić wartość właściwości.
Przykład
Poniższy przykład przedstawia użycie właściwości tylko do odczytu w obiekcie properties. Utwórz plik index.html i dodaj do niego następujący kod
<!doctype html>
<html>
<head>
<title>Polymer Example</title>
<script src = "bower_components/webcomponentsjs/webcomponents-lite.js"></script>
<link rel = "import" href = "bower_components/polymer/polymer.html">
<link rel = "import" href = "my-element.html">
</head>
<body>
<my-element></my-element>
</body>
</html>
Teraz utwórz kolejny plik o nazwie my-element.html i dołącz następujący kod.
<link rel = "import" href = "bower_components/polymer/polymer-element.html">
<link rel = "import" href = "prop-element.html">
//it specifies the start of an element's local DOM
<dom-module id = "my-element">
<template>
<prop-element my-prop = "{{demoProp}}"></prop-element>
<p>Present value: <span>{{demoProp}}</span></p>
</template>
<script>
Polymer ({
is: "my-element", properties: {
demoProp: String
}
});
</script>
</dom-module>
Następnie utwórz jeszcze jeden plik o nazwie prop-element.html i dodaj następujący kod.
//it specifies the start of an element's local DOM
<dom-module id="prop-element">
<template>
<button on-click="onClickFunc">Change value</button>
</template>
<script>
Polymer ({
is: "prop-element", properties: {
myProp: {
type: String,
notify: true,
readOnly: true,
value: 'This is initial value...'
}
},
onClickFunc: function(){
this._setMyProp('This is new value after clicking the button...');
}
});
</script>
</dom-module>
Wynik
Uruchom aplikację, jak pokazano w poprzednim przykładzie, i przejdź do http://127.0.0.1:8081/. Poniżej będzie wynik.
Po kliknięciu przycisku zmieni wartość, jak pokazano na poniższym zrzucie ekranu.
Odzwierciedlanie właściwości w atrybutach
Atrybut HTML można zsynchronizować z wartością właściwości, ustawiając właściwość reflectToAttribute do true we właściwości w obiekcie konfiguracyjnym właściwości.
Serializacja atrybutów
Wartość właściwości można serializować do atrybutu, odzwierciedlając lub wiążąc właściwość z atrybutem, a wartości domyślne mogą być serializowane w zależności od bieżącego typu wartości.
String - Nie ma potrzeby serializacji.
Date or Number - Użyj toString, aby serializować wartości.
Boolean - Ustaw wyświetlany atrybut bez wartości jako prawda lub fałsz.
Array or Object - Użyj JSON.stringify, aby serializować wartość.