vue自定义指令在Render函数中的使用

来源:程序思维浏览:7337次
最近在做SSR服务端渲染,vue官方提示做自定义指令需要在render函数里面使用,那么如何在render里使用呢?


自定义指令基本用法

//全局注册
Vue.directive('指令名', {
//指令属性
})

//局部注册
var app = new Vue({
el: '#app',
directives:{
  '指令名':{
   //指令属性
  }
}
});

自定义指令的属性有5个钩子函数组成,每个函数都是可选的。

bind 指令第一次绑定到元素时调用,定义初始化动作
inserted 被绑定元素插入到父节点时调用
update 被绑定元素更新时调用,不论绑定值是否改变
componentUpdated 被绑定元素所在模板完成一个更新周期时调用
unbind 只调用一次,指令与元素解除绑定时调用
<input type="text" v-test>

Vue.directive('test', {
bind:function(el){
  el.focus();
}
})

每个钩子函数都有多个可选参数

el 绑定的dom元素
binding 对象,拥有以下属性
name 指令名称,不包含v-前缀
value 指令的绑定值。如果自定义标签的写法是 v-test = “1+1”,那么value就为2
oldValue 指令绑定的前一个值,只在update或者* componentUpdated钩子函数中可以使用
expression 绑定值的字符串形式,v-test = “1+1"这个表达式的字符串就是"1+1”
arg 传给指令的参数 v-test=myData,arg的值就是myData
modifiers 包含修饰符的对象。v-test=myData.value那么modifiers的值就是{myData:true,value:true}
vnode Vue编译生成的虚拟节点
oldVnode 上一个虚拟节点只在update或componentUpdated钩子函数中可以使用

Render函数

Vue2与Vue1最大的区别是Vue2使用虚拟节点更新DOM,提示渲染性能。
Vue中的虚拟节点是一个js对象

var vNode = {
tag:'div',//当前节点标签类型
attributes:{
  id:'main'
},
children:{
  //子节点
}
}

Render函数通过createElement参数创建virtualDom,从而简化组件的写法。适用于组件中有大量代码是重复的场景,使用Render函数在其中通过书写js方法生成virtualDom。

render:function(createElement){
return createElement(
'h' +this.level,//搭配level生成h标签
[
  createElement( //创建子节点
   'a',//生成a标签
   {
    domProps:{
     href:'#' + this.title//定义属性,href超链接到title对应的网址
    }
   },
   this.$slots.default
  )
])
}

createElement的用法

参数

createElement有三个参数,第一个参数为html标签或者组件或者函数,这个参数是必选参数。第二个参数可选,对应属性中的数据对象。第三个参数也是可选参数,对应子节点,子节点也是用createElement方法构建。

createElement(
'div', //String | Object | Function
{},  //Object
[  //String|Array
  createElement('h1')
]
)

第二个参数的可以定义属性类型:

class:{ //类名 参考v-bind:class
className:true
},
style:{ //样式,参考v-bind:style
color:'red'
},
attr:{ //html属性
id:'test'
},
props:{ //组件的props
myData: 'message'
},
domProps:{//Dom属性
innerHtml:'baz'
},
on:{//自定义事件监听器,但是不支持修饰器,需要手动配置
click: this.clickHandler
},
nativeOn:{//监听原生事件
click: this.nativeClickHandler
},
directives:[//自定义指令
{
  name:'myDIrective',
  value:2,
  expression:' 1+1',
  arg:'foo',
  modifiers:{
   bar:true
  }
}
],
scopedSlots:{ //作用域{ name:props => VNode|Array<VNode>}
default: props => h('span',props.text)
},
slot:'name-of-slot', //子组件定义的slot名称
//下面是其他特殊顶层属性
key:'myKey',
ref:'myRef'

Render的写法比较复杂且可读性差,一般都用template来实现,只有特殊的场景才使用Render函数。

在组件树中,VNode如果是组件或者含有组件的slot,那么VNode必须唯一。

好了vue中Render函数的用法就写到这里,希望对大家有帮助。
精品好课
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
收藏
扫一扫关注我们