web_component

  1. 一个webcomponent
    1. index.html
    2. Store.js
    3. orderList.html

一个webcomponent

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>webcomponent</title>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.14/webcomponents-hi.js"></script>
   <link rel="import" href="orderList.html" />
</head>

<body>
   <order-list v-for="arr">
       <div slot="render">#item</div>
   </order-list>
</body>
<script type="text/javascript" src="./store.js"></script>
<script type="text/javascript">
   var store = new Store(function data() {
       return {
           arr: [1, 2, 3, 4, 5]
       }
   })
   window.store = store;

</script>

</html>

Store.js

class Store {
   constructor(data) {
       window.data = data()
   }
}
window.Store = Store;

orderList.html

<template id="orderList">
   <slot name="render" id="render"></slot>
</template>
<script type="text/javascript">
   class orderList extends HTMLElement {
       constructor() {
           super()
           // 查找模板内容
           const content = document.querySelector('#orderList').content;
           // 创建Shadow DOM
           const shadowDOM = this.attachShadow({ mode: 'open' });
           // 将模板添加到Shadow DOM上
           shadowDOM.appendChild(content.cloneNode(true));
           var r = this.getAttribute("v-for");
           this.renderItem(data[r])
       }
       renderItem(data) {
           var subItem = document.querySelector('div[slot="render"]');
           var template = document.querySelector("#orderList")
           var strTemplate = ``;
           for (var i in data) {
               var html = subItem.innerHTML;
               console.log("div", subItem.nodeName)
               var nodeName = subItem.nodeName.toLocaleLowerCase();
               var that = this;
               html.replace(/#item/g, function (a) {
                   console.log("a",a)
                   var dom = document.createElement(nodeName);
                   dom.innerHTML = data[i];
                   subItem.appendChild(dom.cloneNode(true))
               })
           }
       }
       //首次插入DOM文档时调用
       connectedCallback() {
           //在这里发送数据请求(Ajax)
       }
       //被从文档DOM中删除时调用
       disconnectedCallback() {
           console.log("n")
       }
       //被移动到新的文档时调用
       adoptedCallback() {
           console.log("c")
       }
       //当增加、删除、修改自身的属性时被调用
       attributeChangedCallback() {
           console.log("d")
       }
   }
   window.customElements.define('order-list', orderList);
</script>

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 ggchzzz@163.com

文章标题:web_component

字数:469

本文作者:ggchzzz

发布时间:2022-03-03, 01:29:22

最后更新:2023-12-22, 23:17:54

原始链接:https://anska.info/post/8.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

github