Polimer - Elemen Kustom
Polimer adalah kerangka kerja yang memungkinkan pembuatan elemen khusus menggunakan elemen HTML standar. Elemen web kustom menyediakan fitur-fitur berikut -
Ini memberikan nama elemen khusus dengan kelas asosiasi.
Saat Anda mengubah status instance elemen khusus, itu akan meminta callback siklus hidup.
Jika Anda mengubah atribut pada sebuah instance, maka panggilan balik akan diminta.
Anda dapat menentukan elemen khusus menggunakan kelas ES6 dan kelas dapat dikaitkan dengan elemen khusus seperti yang ditunjukkan pada kode berikut.
//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);
Elemen khusus dapat digunakan sebagai elemen standar seperti yang ditunjukkan di bawah ini -
<element-demo></element-demo>
Note - Nama elemen khusus harus dimulai dengan huruf kecil dan berisi tanda hubung di antara nama.
Siklus Hidup Elemen Kustom
Daur hidup elemen khusus menyediakan sekumpulan reaksi elemen khusus yang bertanggung jawab atas perubahan dalam daur hidup elemen dan ditentukan dalam tabel berikut.
Sr.No. | Reaksi & Deskripsi |
---|---|
1 | constructor Saat Anda membuat elemen atau menentukan elemen yang dibuat sebelumnya, reaksi elemen ini akan dipanggil. |
2 | connectedCallback Saat Anda menambahkan elemen ke dokumen, reaksi elemen ini akan dipanggil. |
3 | disconnectedCallback Saat Anda menghapus elemen dari dokumen, reaksi elemen ini akan dipanggil. |
4 | attributeChangedCallback Setiap kali Anda mengubah, menambahkan, menghapus, atau mengganti elemen dari dokumen, reaksi elemen ini akan dipanggil. |
Peningkatan Elemen
Kita dapat menggunakan elemen khusus sebelum menentukannya dengan spesifikasi dan setiap contoh elemen yang ada akan ditingkatkan ke kelas khusus dengan menambahkan definisi ke elemen itu.
Status elemen kustom berisi nilai-nilai berikut -
uncustomized - Nama elemen khusus yang valid adalah elemen bawaan atau elemen yang tidak diketahui, yang tidak bisa menjadi elemen khusus.
undefined - Elemen dapat memiliki nama elemen khusus yang valid, tetapi tidak dapat ditentukan.
custom - Elemen dapat memiliki nama elemen khusus yang valid, yang dapat ditentukan dan ditingkatkan.
failed - Mencoba mengupgrade elemen gagal dari kelas yang tidak valid.
Mendefinisikan sebuah Elemen
Elemen kustom dapat ditentukan dengan membuat kelas yang memperluas Polymer.Element dan meneruskan kelas ke metode customElements.define. Kelas berisi adalah metode pengambil yang mengembalikan nama tag HTML dari elemen khusus. Misalnya -
//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');
Impor dan API
Elemen Polymer dapat ditentukan dengan menentukan tiga impor HTML berikut -
polymer-element.html - Ini menentukan kelas dasar Polymer.Element.
legacy-element.html- Ini memperluas Polymer.Element menggunakan kelas dasar Polymer.LegacyElement dan menambahkan API warisan kompatibel 1.x. Ini juga membuat elemen hibrid dengan menentukan metode pabrik Polymer () lama.
polymer.html - Terdiri dari kelas dasar Polimer bersama dengan elemen pembantu, yang termasuk dalam 1.x polymer.html.
Tentukan Elemen di Dokumen HTML Utama
Anda bisa mendefinisikan elemen dalam dokumen HTML utama menggunakan fungsi HTMLImports.whenReady ().
Contoh
Contoh berikut menunjukkan cara mendefinisikan elemen di dokumen HTML utama. Buat file index.html dan tambahkan kode berikut.
<!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>
Sekarang buat elemen khusus yang disebut define-element.html dan sertakan kode berikut.
<dom-module id = "define-element">
<template>
<h2>Welcome to Tutorialspoint!!!</h2>
</template>
<script>
HTMLImports.whenReady(function(){
Polymer ({
is: "define-element"
})
})
</script>
</dom-module>
Keluaran
Untuk menjalankan aplikasi, buka direktori proyek yang dibuat dan jalankan perintah berikut.
polymer serve
Sekarang buka browser dan arahkan ke http://127.0.0.1:8081/. Berikut akan menjadi keluarannya.
Tentukan Elemen Legacy
Elemen lama dapat digunakan untuk mendaftarkan elemen menggunakan fungsi Polimer, yang mengambil prototipe untuk elemen baru. Prototipe harus berisiis yang mendefinisikan nama tag HTML untuk elemen khusus.
Contoh
//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();
Lifecycle Callbacks
Callback siklus hidup digunakan untuk menyelesaikan tugas-tugas untuk fitur bawaan Polymer.Elementkelas. Polymer menggunakan callback siap pakai, yang akan dipanggil saat Polymer selesai membuat dan menginisialisasi elemen DOM.
Berikut adalah daftar callback lama di Polymer.js.
created - Dipanggil saat Anda membuat elemen sebelum menyetel nilai properti dan menginisialisasi DOM lokal.
ready - Dipanggil saat Anda membuat elemen setelah menyetel nilai properti dan menginisialisasi DOM lokal.
attached - Disebut setelah melampirkan elemen ke dokumen dan dapat dipanggil lebih dari satu kali selama masa pakai elemen.
detached - Disebut setelah melepaskan elemen dari dokumen dan dapat dipanggil lebih dari sekali selama masa pakai elemen.
attributeChanged - Dipanggil ketika ada perubahan dalam atribut elemen dan menahan perubahan atribut, yang tidak kompatibel dengan properti yang dideklarasikan.
Mendeklarasikan Properti
Properti dapat dideklarasikan pada elemen untuk menambahkan nilai default dan fitur spesifik lainnya dalam sistem data dan mereka dapat digunakan untuk menentukan fitur berikut -
Ini menentukan jenis properti dan nilai default.
Ini memanggil metode pengamat, ketika ada perubahan pada nilai properti.
Ini menentukan status hanya baca untuk menghentikan perubahan tak terduga pada nilai properti.
Ini memberikan dukungan untuk data binding dua arah, yang memicu peristiwa saat Anda mengubah nilai properti.
Ini adalah properti yang dihitung, yang menghitung nilai secara dinamis tergantung pada properti lainnya.
Ini memperbarui dan mencerminkan nilai atribut yang sesuai, ketika Anda mengubah nilai properti.
Tabel berikut menunjukkan kunci untuk setiap properti, yang didukung oleh objek properti.
Sr.No. | Kunci & Deskripsi | Tipe |
---|---|---|
1 | type Ini deserializes dari atribut yang tipe propertinya ditentukan menggunakan konstruktor tipe. |
konstruktor (Boolean, Tanggal, Angka, String, Array atau Objek) |
2 | value Ini menentukan nilai default untuk properti dan jika itu adalah fungsi, maka itu menggunakan nilai yang dikembalikan sebagai nilai default dari properti. |
boolean, angka, string atau fungsi. |
3 | reflectToAttribute Jika kunci ini disetel ke true, maka itu menetapkan atribut yang sesuai pada node host. Atribut dapat dibuat sebagai atribut boolean HTML standar, jika Anda menyetel nilai properti sebagai Boolean. |
boolean |
4 | readOnly Anda tidak dapat menyetel properti secara langsung dengan penetapan atau pengikatan data, jika kunci ini disetel ke true. |
boolean |
5 | notify Anda dapat menggunakan properti untuk data binding dua arah, jika kunci ini disetel ke true dan saat Anda mengubah properti, peristiwa yang diubah nama properti akan dipicu. |
boolean |
6 | computed Anda dapat menghitung nilai argumen setiap kali berubah, dengan memanggil metode dan nilai akan disederhanakan sebagai nama metode dan daftar argumen. |
tali |
7 | observer Panggil nama metode, yang disederhanakan dengan nilai, ketika nilai properti berubah. |
tali |
Atribut Deserialization
Deserialisasi nama properti yang cocok dengan atribut pada instance sesuai dengan jenis yang ditentukan dan nama properti yang sama pada instance elemen, jika properti tersebut dikonfigurasi di objek properti.
Anda dapat menyetel tipe yang ditentukan secara langsung sebagai nilai properti, jika tidak ada opsi properti lain yang ditentukan dalam objek properti; jika tidak, ini akan memberikan nilai ke kunci tipe di objek konfigurasi properti.
Mengonfigurasi Properti Boolean
Properti Boolean dapat dikonfigurasi dari markup, dengan menyetelnya ke false dan jika disetel ke true, Anda tidak dapat mengonfigurasi dari markup karena atribut dengan atau tanpa nilai disamakan dengan true. Oleh karena itu, ini dikenal sebagai perilaku standar untuk atribut di platform web.
Properti objek dan array dapat dikonfigurasi dengan meneruskannya dalam format JSON sebagai -
<element-demo player = '{ "name": "Sachin", "country": "India" }'></element-demo>
Mengonfigurasi Nilai Properti Default
Properti default dapat dikonfigurasi menggunakan bidang nilai di objek properti dan bisa berupa nilai primitif, atau fungsi yang mengembalikan nilai.
Contoh
Contoh berikut menggambarkan cara mengkonfigurasi nilai properti default di objek properti.
<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>
Keluaran
Jalankan aplikasi seperti yang ditunjukkan pada contoh sebelumnya, dan navigasikan ke http://127.0.0.1:8000/. Berikut akan menjadi keluarannya.
Properti hanya-baca
Anda bisa menghindari perubahan tak terduga pada data yang dihasilkan dengan menyetel tanda readOnly ke true, di objek properti. Elemen menggunakan penyetel konvensi _setProperty (nilai), untuk mengubah nilai properti.
Contoh
Contoh berikut menggambarkan penggunaan properti hanya-baca di objek properti. Buat file index.html dan tambahkan kode berikut di dalamnya
<!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>
Sekarang, buat file lain bernama my-element.html dan sertakan kode berikut.
<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>
Selanjutnya, buat satu file lagi bernama prop-element.html dan tambahkan kode berikut.
//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>
Keluaran
Jalankan aplikasi seperti yang ditunjukkan pada contoh sebelumnya, dan navigasikan ke http://127.0.0.1:8081/. Berikut akan menjadi keluarannya.
Setelah mengklik tombol, itu akan mengubah nilai seperti yang ditunjukkan pada tangkapan layar berikut.
Mencerminkan Properti ke Atribut
Atribut HTML dapat disinkronkan dengan nilai properti dengan mengatur reflectToAttribute menjadi true pada properti di objek konfigurasi properti.
Atribut Serialisasi
Nilai properti dapat diserialkan ke atribut, sambil mencerminkan atau mengikat properti ke atribut, dan secara default nilai dapat diserialkan tergantung pada tipe nilai saat ini.
String - Tidak perlu serialisasi.
Date or Number - Gunakan toString untuk membuat serialisasi nilai.
Boolean - Setel atribut tidak bernilai yang ditampilkan sebagai benar atau salah.
Array or Object - Gunakan JSON.stringify untuk membuat serialisasi nilai.