组件化开发

Web Components不是单一的规范,而是一系列的技术组成,包括Template、Custom Element、Shadow DOM、HTML Import四种技术规范。使用时,并不一定这四者都要用到。其中,Custom Element和Shadow DOM最重要,Template和HTML Import只起到辅助作用。

template标签

document.importNode方法用于克隆外部文档的DOM节点。

//检查浏览器是否支持
'content' in document.createElement('template');
//模板

//使用模板,并且修改模板内部内容
var template = document.querySelector('#profileTemplate');
template.content.querySelector('.profile__img').src = 'profile.jpg';

Custom Element

HTML预定义的网页元素,有时并不符合我们的需要,这时可以自定义网页元素,这就叫做Custom Element。它是Web component技术的核心。举例来说,你可以自定义一个叫做super-button的网页元素。

//检查浏览器是否支持
'registerElement' in document
//使用自定义元素前,必须用document对象的registerElement方法登记该元素。该方法返回一个自定义元素的构造函数。
var SuperButton = document.registerElement('super-button');
document.body.appendChild(new SuperButton());
//如果想让自定义元素继承某种特定的网页元素,就要指定extends属性。比如,想让自定义元素继承h1元素,需要写成下面这样。
var MyElement = document.registerElement('another-heading', {
  prototype: Object.create(HTMLElement.prototype),
  extends: 'h1'
});
//添加属性和方法
var XFoo = document.registerElement('x-foo', {
  prototype: Object.create(HTMLElement.prototype, {
    bar: {
      get: function() { return 5; }
    },
    foo: {
      value: function() {
        console.log('foo() called');
      }
    }
  })
});

回调函数:

  • createdCallback:实例生成时触发
  • attachedCallback:实例插入HTML文档时触发
  • detachedCallback:实例从HTML文档移除时触发
  • attributeChangedCallback(attrName, oldVal, newVal):实例的属性发生改变时(添加、移除、更新)触发

Shadow DOM

所谓Shadow DOM指的是,浏览器将模板、样式表、属性、JavaScript代码等,封装成一个独立的DOM元素。外部的设置无法影响到其内部,而内部的设置也不会影响到外部,与浏览器处理原生网页元素(比如

var shadowRoot = element.createShadowRoot();
document.body.appendChild(shadowRoot);

HTML Import

网页可以加载外部的样式表、脚本、图片、多媒体,却无法方便地加载其他网页,iframe和ajax都只能提供部分的解决方案,且有很大的局限。HTML Import就是为了解决加载外部网页这个问题,而提出来的。

//检测浏览器是否支持
'import' in document.createElement('link');

你可能感兴趣的:(组件化开发)