Vue.js列表渲染绑定jQuery插件的正确姿势


Posted in jQuery onJune 29, 2017

使用v-for绑定列表时,有时候需要绑定如select2之类的jQuery插件。

需要在Vue根据数组内容生成dom元素之后,去找到该dom元素,然后 $().xxx绑定jQuery插件。

之前使用Vue.nextTick方法,在一次dom更新以后执行延迟回调,渲染jQuery插件。

然而这并不是一种很好的方式,有时候难以确定dom元素更新是否是我们需要关注的那个。 

在列表中渲染Jquery插件的正确姿势,是使用自定义指令。自定义指令提供了一些钩子函数,可以准确的监听到dom元素与数据的绑定周期。

钩子函数

指令定义函数提供了几个钩子函数(可选):

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

unbind: 只调用一次, 指令与元素解绑时调用。

接下来我们来看一下钩子函数的参数 (包括 el,binding,vnode,oldVnode) 。

钩子函数参数

钩子函数被赋予了以下参数:

el: 指令所绑定的元素,可以用来直接操作 DOM 。

binding: 一个对象,包含以下属性:

  • name: 指令名,不包括 v- 前缀。
  • value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2。
  • oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
  • expression: 绑定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
  • arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"。
  • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。

vnode: Vue 编译生成的虚拟节点,查阅 VNode API 了解更多详情。

oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。 

例子

<table id="testTable">
  <tr v-for="(el, lineIndex) in lines" v-line-inserted="lineIndex" >
   <td>
    <input name="bindSelect2" />
   <td>
  </tr>
</table>
function renderLines(el, lineIndex){
  //渲染select2
  $("testTable tr").eq(lineIndex).select2({...});
}

Vue.directive('line-inserted', {
  inserted: function (el, binding) {
   var lineIndex = binding.value;
   renderLines(el, lineIndex);
  }
});

详情参见Vue官方文档自定义指令

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 jQuery
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
jQuery实现定时隐藏对话框的方法分析
Feb 12 jQuery
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 jQuery
jQuery实现的五星点评功能【案例】
Feb 18 jQuery
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
jQuery实现消息弹出框效果
Dec 10 jQuery
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
jQuery实现电梯导航模块
Dec 22 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 #jQuery
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 #jQuery
各种选择框jQuery的选中方法(实例讲解)
Jun 27 #jQuery
基于jQuery封装的分页组件
Jun 26 #jQuery
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 #jQuery
jQuery实现一个简单的验证码功能
Jun 26 #jQuery
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
Jun 26 #jQuery
You might like
PHP脚本数据库功能详解(中)
2006/10/09 PHP
JS实现php的伪分页
2008/05/25 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
python执行get提交的方法
2015/04/29 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
深入浅出学习python装饰器
2017/09/29 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
如何通过python实现全排列
2020/02/11 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
Django缓存Cache使用详解
2020/11/30 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
医学专业大学生求职的自我评价
2013/11/27 职场文书
运动会方阵解说词
2014/02/12 职场文书
《雾凇》教学反思
2014/02/17 职场文书
财会专业大学生求职信
2014/09/26 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
小学校长个人总结
2015/03/03 职场文书
妈妈别哭观后感
2015/06/08 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Nginx速查手册及常见问题
2022/04/07 Servers