问答

web component api javascript如何隔离

作者:admin 2021-04-18 我要评论

使用web component api 实现自定义组件的时候,如果两个函数名冲突,第二个会覆盖第一个,有没有办法让函数隔离? script type="text/x-template" id="demo" tem...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

使用web component api 实现自定义组件的时候,如果两个函数名冲突,第二个会覆盖第一个,有没有办法让函数隔离?

image.png

<script type="text/x-template" id="demo">
    <template>
      <button onclick="handleclick()">btn</button>
    </template>

    <script>
      function handleclick() { console.log(2222) }
    </script>
</script>
function render(id) {
  const xTemplate = document.getElementById(id)
  let div = document.createElement('div')
  div.innerHTML = xTemplate.innerHTML

  const html = div.getElementsByTagName('template')[0]
  const style = div.getElementsByTagName('style')[0]
  const script = div.getElementsByTagName('script')[0]

  div = null

  const template = document.createElement('template')
  template.id = id
  if (html) {
    template.content.append(html.content)
  }
  if (style) {
    template.content.append(style)
  }
  if (script) {
    const el = document.createElement('script')
    el.innerHTML = script.innerHTML
    template.content.append(el)
  }

  const component = Object.create(null)
  component.tag = id + '-component'
  component.el = document.createElement(component.tag)

  class Component extends HTMLElement {
    constructor() {
      super()
      const shadow = this.attachShadow( { mode: 'closed' } )
      const templateElem = document.getElementById(id)
      const content = templateElem.content.cloneNode(true)
      shadow.appendChild(content)
    }
  }

  window.customElements.define(component.tag, Component)

  document.body.removeChild(xTemplate)
  document.body.appendChild(template)
  document.body.appendChild(component.el)
  document.body.removeChild(template)

}

render('demo')

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器