Vue-Control辅助器
注意本package中的dom节点和text节点封装尚未完善,酌情使用,目前Vue组件封装的较为完善
用来让vue表现得更像一个control,支持添加控件,包括获取slots的Element数组等,黑心为IElement代理类型,可代理三种不同的vue节点:实例,text,dom节点,使用统一的接口操作时间,属性等
主要部分
核心类与接口
//表示一个节点
有三个class实现了此接口
- VueElement 表示一个vue组件实例
- DomElement 表示一个dom节点实例
- TextElement 表示一个text节点 每个类都有一个静态的create函数用来创建此类的节点并执行检查,定义如下
createnode: VNode: IElement | null;
我们推荐使用node函数创建IElement,这是一个通用创建函数,具体在下方说明
构建部分
构建部分核心为node函数,定义如下:
declare ;
此函数从一个vue的VNode节点创建一个Element
但一般不直接使用此函数,而是使用一下工具函数
- element() 可以从一个vue实例创建一个Element,可以在如mounted之类的函数中使用element(this)来获取与本组件对应的Element
- slots() 可以从一个vue实例的slots中创建一个Slots对象,此对象定义如下:
- children() 函数,可以从一个vue实例得到一个element数组,表示其直接子节点列表,如果没有子节点,返回空数组
判断部分
下面三个函数用来在使用时判断情况:
declare ;declare ;declare ;
每一个的含义不言自明,通过使用if判断可以自动启动编辑器的智能提示,提供某些element特有的属性,如textelement的text属性,以及一些约束,如textelement的setProp和getProp只能接受text一个属性名
示例
以下是一个不怎么好的例子
//容器组件 //这里导入node 和element两个函数 其中node可以从vnode得到element element可以从//vue实例得到自己的element ;
此组件可以对内部传入的子节点做修改,增加统一的事件监听,可以使用箭头函数以得到独立的this上下文和闭包,灵活度高于template写法
更新内容 1.2.0
添加了each函数,用于在render或mounted等函数中加入updated事件的工作,类似hooks的功能,用法
...mounted
总结
本helper包用于在vue中执行各种element相关操作,某些必须以传统control形式而非以所谓的数据驱动和mvc方式进行的工作,如控件封装和容器组件编写,在容器组件中改变slot传入的子组件的行为等,并不符合 匹配数据驱动视图的基本模式的情况
如果将slots传入的组件也看做props,则容器组件本应该有针对slots的完整操作能力,这与数据驱动试图并不矛盾,slots作为props也算数据的一部分
本helper包主要用于抽象逻辑封装,如单选 切换等