event

...

V-model

很多同学在理解    Vue    的时候都把    Vue    的数据响应原理理解为双向绑定,但实际上这是不准确的,我们 之前提到的数据响应,都是通过数据的改变去驱动    DOM    视图的变化,⽽双向绑定除了数据驱动    DOM 外,    DOM    的变化反过来影响数据,是⼀个双向关系,在    Vue    中,我们可以通过        v-model        来实现双 向绑定。    v-model        即可以作⽤在普通表单元素上,⼜可以作⽤在组件上,它其实是⼀个语法糖,接下来我们 就来分析        v-model        的实现原理。 

扩展

扩展

扩展

扩展

扩展

扩展

组件


扩展

扩展

扩展

扩展

扩展

总结

那么⾄此,    v-model        的实现就分析完了,我们了解到它是    Vue    双向绑定的真正实现,但本质上就是 ⼀种语法糖,它即可以⽀持原⽣表单元素,也可以⽀持⾃定义组件。在组件的实现中,我们是可以配 置⼦组件接收的        prop        名称,以及派发的事件名称。
 

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

后续流程之前已介绍过,不再赘述,那么⾄此,作⽤域插槽的实现也就分析完毕。

总结

通过这⼀章的分析,我们了解了普通插槽和作⽤域插槽的实现。它们有⼀个很⼤的差别是数据作⽤ 域,普通插槽是在⽗组件编译和渲染阶段⽣成        vnodes    ,所以数据的作⽤域是⽗组件实例,⼦组件渲 染的时候直接拿到这些渲染好的        vnodes    。⽽对于作⽤域插槽,⽗组件在编译和渲染阶段并不会直接 ⽣成        vnodes    ,⽽是在⽗节点        vnode        的        data        中保留⼀个        scopedSlots        对象,存储着不同名称 的插槽以及它们对应的渲染函数,只有在编译和渲染⼦组件阶段才会执⾏这个渲染函数⽣成    vnodes    ,由于是在⼦组件环境执⾏的,所以对应的数据作⽤域是⼦组件实例。 简单地说,两种插槽的⽬的都是让⼦组件        slot        占位符⽣成的内容由⽗组件来决定,但数据的作⽤域 会根据它们        vnodes        渲染时机不同⽽不同。
 

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

总结

那么⾄此,    <keep-alive>        的实现原理就介绍完了,通过分析我们知道了        <keep-alive>        组件是⼀ 个抽象组件,它的实现通过⾃定义        render        函数并且利⽤了插槽,并且知道了        <keep-alive>        缓存    vnode    ,了解组件包裹的⼦元素——也就是插槽是如何做更新的。且在        patch        过程中对于已缓存的 组件不会执⾏        mounted    ,所以不会有⼀般的组件的⽣命周期函数但是⼜提供了        activated        和    deactivated        钩⼦函数。另外我们还知道了        <keep-alive>        的        props        除了        include        和    exclude        还有⽂档中没有提到的        max    ,它能控制我们缓存的个数。
 

 

扩展

内置组件


扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

扩展

总结

那么到此为⽌基本的        <transition>        过渡的实现分析完毕了,总结起来,Vue    的过渡实现分为以下⼏ 个步骤: 1.    ⾃动嗅探⽬标元素是否应⽤了    CSS    过渡或动画,如果是,在恰当的时机添加/删除    CSS    类名。 2.    如果过渡组件提供了    JavaScript    钩⼦函数,这些钩⼦函数将在恰当的时机被调⽤。 3.    如果没有找到    JavaScript    钩⼦并且也没有检测到    CSS    过渡/动画,DOM    操作    (插⼊/删除)    在下⼀帧 中⽴即执⾏。 所以真正执⾏动画的是我们写的    CSS    或者是    JavaScript    钩⼦函数,⽽    Vue    的        <transition>        只是帮我 们很好地管理了这些    CSS    的添加/删除,以及钩⼦函数的执⾏时机。
 

transition-group 

扩展

扩展

扩展

扩展

render    函数

 


扩展

扩展

扩展

扩展

扩展

 

相关文章: