ç´ç²ãª HTML+JavaScript ã ãã§ã«ã¹ã¿ã ã¿ã°ãä½ã
ã«ã¹ã¿ã ãªã¿ã°ãä½æãã¦ã³ã³ãã¼ãã³ããä½æãããã¬ã¼ã ã¯ã¼ã¯ã使ã£ããã¨ã®ãã人ã¯å¤ãã¨æãã
ã¨è¨ãããã®ãµã¤ãã§ç´¹ä»ãã¦ãã LWC ãªãã¦ã¾ãã¾ããã ãâ¦
ã§ããã® ã¿ã°ãä½ãã£ã¦ä»æ§çã«ã©ããªã£ã¦ããï¼
ã¦äºã§èª¿ã¹ã¦ã¿ãã
è足ãå¤ãâ¦ï¼ï¼
ã§ããªãã¨ãæåããã®ã§ãã®ä½ãæ¹ãã¡ã¢ããã
ã¿ã°ãä½æãã¦å®£è¨ãã
ããã§ã¯ããã¾ã§ã¿ã°ã宣è¨ãã¦ä½¿ããã¨ã ããèããã
ãªã®ã§ãä»æ§ã¯æå°éã§
<echo-tag message="HAHAHA!"></echo-tag>
ãããªæãã§æ¸ãããããHAHAHAãã¨æååãåºåããã ãã®ã¿ã°ãèããã
ã¾ãã¯ãé©å½ã« EchoTag.js
ãã¡ã¤ã«ãä½æãã¦ä»¥ä¸ã®ããã«æ¸ã
class EchoTag extends HTMLElement { // ã³ã³ã¹ãã©ã¯ã¿ constructor() { super(); this._innerText = null; } // ãã®å¤æ°ã«å®£è¨ãããå±æ§ã¯ã追å /åé¤/æ´æ°ãããã¨ãã« attributeChangedCallback ãå¼ã°ãã static observedAttributes = ["message"]; // å±æ§å¤ãæ´æ°ããããå¼ã³åºãããã³ã¼ã«ããã¯ã attributeChangedCallback(name, oldValue, newValue) { this._innerText = newValue; this._updateRendering(); } // ãã®ã¿ã°ã親ã®ã¿ã°ã«é ç½®ãããã¨å¼ã³åºãããã³ã¼ã«ãã㯠connectedCallback() { this._updateRendering(); } // JavaScript ã§ã¿ã°ä½æããã¨ãã®å±æ§ãã©ã¡ã¼ã¿ get message() { return this._innerText; } set message(v) { this.setAttribute("message", v); } // ã«ã¹ã¿ã é¢æ°ãã³ã³ã§ã¯ Shadow DOM ã宣è¨ãã¦ãspan ã¿ã°ãä½ã£ã¦è¡¨ç¤ºããã ãã _updateRendering() { this.attachShadow({mode: 'open'}); // append child. const spanElement = document.createElement("span"); spanElement.innerHTML = this._innerText; this.shadowRoot.append(spanElement); } } // ã«ã¹ã¿ã è¦ç´ ã¨ãã¦ããã©ã¦ã¶ã«ç»é²ãã customElements.define("echo-tag", EchoTag);
ã¿ã°ã¨ãã¦å©ç¨ãã
使ãå´ã® HTML 㯠index.html
ã¨ã§ããã¦ããã
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- ã¿ã°å®ç¾©ãèªã¿è¾¼ã㧠--> <script src="./EchoTag.js"></script> </head> <body> <div><span>Example!</span></div> <!-- 使ãã ã --> <echo-tag message="Welcome to custom tag!"></echo-tag> </body> </html>
åããã¦ã¿ã
é常ã«ã·ã³ãã«ã§ãæ¸ãã ãæ¸ããããµã¼ãã建ã¦ããã
èªåã¯ããã©ãããã®ã§ Python 3.11.x 㧠python -m http.server 8000
ã§ãµã¼ããç«ã¦ãã
ãã®çµæã¯ãã®éã
å ã¿ã«ãShadow DOM ã使ããªãå ´åã¯ã_updateRendering
ã次ã®æ§ã«æ¸ãã
_updateRendering() { // this.attachShadow({mode: 'open'}); this.innerHTML = null; // append child. const spanElement = document.createElement("span"); spanElement.innerHTML = this._innerText; this.append(spanElement); // this.shadowRoot.append(spanElement); }
çµæãè¥å¹²ç°ãªãã
Shadow DOM ã«é¢ãã¦ã¯ææ¥èª¿æ»ããâ¦