avalon2组件的相关概念详解

[TOC]

avalon拥有两大利器,强大的组件化功能以应对复杂墙问题,顶级的虚拟DOM机制来解决性能墙问题。

组件可谓是指令的集合,但1+1 > 2!

组件容器

组件容器是一个占位用的元素节点. 当avalon扫描到此位置上时将它替换成组件.

在avalon2中有4类标签可以用作组件容器,分别是wbr, xmp, template, 及ms-开头的自定义标签.

其兼容性如下

元素
类型
说明

wbr
所有浏览器, 自闭合标签
需要使用ms-widget来指定组件类型

xmp
所有浏览器, 闭合标签
需要使用ms-widget来指定组件类型,里面可以使用slot属性元素

template
IE9+及W3C浏览器,闭合标签
需要使用ms-widget来指定组件类型,里面可以使用slot属性元素

ms-*
IE9+及W3C浏览器,闭合标签
可以省略ms-widget, 里面可以使用slot属性元素

闭合标签,比如
自闭合标签,比如超级产品经理+++',
defaults: {
num: 1,
onPlus: function () {
this.num++;
}
},
getTemplate: function(vm, template){
return template.replace('ms-on-click','ms-on-mousenter')
}
});

渲染真相

var widgetVTree = widgetName(widgetOptions, slots, getTemplate(template))
/
widgetName: ms-widget中的is配置项或自定义标签的标签名
widgetOptions: ms-widget配置项
slots: 所有插卡元素组成的对象
getTemplate: 组件定义中getTemplate配置项
template: 组件定义中template配置项
widgetVTree: 组件的虚拟DOM,
/

生命周期

avalon2组件拥有完善的生命周期钩子,方便大家做各种操作。

avalon2
web component
react

初始化
onInit
createdCallback
getDefaultProps

插入DOM树
onReady
attachedCallback
componentDidMount

视图变化
onViewChange
attributeChangedCallback
componentDidUpdate

移出DOM树
onDispose
detachedCallback
componentWillUnmount

onInit,这是组件的vm创建完毕就立即调用时,这时它对应的元素节点或虚拟DOM都不存在。只有当这个组件里面不存在子组件或子组件的构造器都加载回来,那么它才开始创建其虚拟DOM。否则原位置上被一个注释节点占着。

onReady,当其虚拟DOM构建完毕,它就生成其真实DOM,并用它插入到DOM树,替换掉那个注释节点。相当于其他框架的attachedCallback, inserted, componentDidMount.

onViewChange,当这个组件或其子孙节点的某些属性值或文本内容发生变化,就会触发它。它是比Web Component的attributeChangedCallback更加给力。

onDispose,当这个组件的元素被移出DOM树,就会执行此回调,它会移除相应的事件,数据与vmodel。

工作原理

avalon会先将组件容器转换为一个渲染函数,传入组件VM,成一个虚拟DOM(shellRoot)

再将组件定义中的template转换为第二个渲染函数,传入组件VM,成一个虚拟DOM(component)

然后将shellRoot的最外层元素的所有属性合并到component的最外层的元素上.

再将shellRoot中的插卡元素, 插入到component中的插槽元素的位置上.

将component变成真实DOM,替换组件容器.

具体例子

请移步到Github

官方组件集

Promise

mmPromise

npm install avalon-promise

ajax组件

mmRequest

npm install mmPequest

redux事件派发组件

mmDux

npm install mmDux

路由组件

mmRouter

动画组件

虽然avalon2已经拥有ms-effect指令,但那是基于CSS3的,在IE6-8下是需要JS库来支持
mmAnimate

npm install mmAnimate

弹窗组件

ms-modal

npm install ms-modal

分页组件

ms-pager

npm install ms-pager

切换卡组件

ms-tabs

npm install ms-tabs

关键字:avalon

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部