最近啃出来了 Web Components 的使用方法,感觉挺有意思。组件的整个封装过程与 React 非常相似,只是在注册局部事件出入较大,绕了一个大圈圈又转回来了。一个单独的 JavaScript 文件就可以当作一个组件引入来使用,在轻量开发中会给开发者提供很大的方便,从而省去了安装配置框架的麻烦。注:由于此 API 是由现代浏览器推出,所以旧版本的浏览器可能会不支持,顺便将封闭好的一个小组件 demo 贴出来作为纪念!
class YhnDiv extends HTMLElement {
constructor () {
super();
/* 创建模板 */
var temp = document.createElement('template');
temp.innerHTML = `
<style>
#title {
margin: 4px;
padding: 8px;
font-size: 36px;
border: 1px solid #cccccc;
border-radius: 2px;
color: #3388ff;
}
</style>
<div id="title">天下唯我独尊 ${this.getAttr('txt')}</div>
`;
/* 设置封闭 */
var shadow = this.attachShadow({mode: 'closed'});
shadow.appendChild(temp.content);
/* 注册事件 */
shadow.getElementById('title').onclick = this.testFun;
}
testFun () {
console.log('天下功夫,唯快不破!');
}
/* 获取属性 */
getAttr (attr) {
return this.getAttribute(attr) || '';
}
}
customElements.define('yhn-div', YhnDiv);将以上代码保存为一个 js 文件,引入一个 html 文件,组件的使用如下:
<yhn-div txt="组件传值"></yhn-div>
我们像平常写div一样来使用自定义组件,并且还可以支持组件传值。需要注意的是,自定义组件只支持带中划线(单个或多个)的书写方式。

发表评论