time: 2021-12-30 16:36:04
最近在做微前端,使用 umd 方式加载资源,搭配 shadow dom 实现样式隔离,特此来学习总结一下
第一步,定义 custom element class
export default class WordCount extends HTMLElement {
constructor() {
super()
var shadow = this.attachShadow({mode: 'open'})
var wrapper = document.createElement('span')
wrapper.textContent = 'content'
shadow.appendChild(wrapper)
}
connectedCallback() {
console.log('connectedCallback')
}
disconnectedCallback() {
console.log('disconnectedCallback')
}
}
第二步,注册组件 customElements.define('word-count', WordCount)
第三步,配置 vue 全局自定义组件 Vue.config.ignoredElements = ['word-count']
第四步,使用组件 <word-count />
作用:可以将标记结构、样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净、整洁
创建方式:this.attachShadow({mode: 'open'})
open 和 closed 作为可选项,open 表示外部可以访问 shadowRoot
节点
弊端:由于 shadow dom 不能改变外部 dom 样式,如果我们的 dialog 是渲染在 body 里面,则会丢失响应样式,需要控制只能渲染到 shadowRoot 里面