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实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
jQuery实现动态添加、删除按钮及input输入框的方法
Apr 27 jQuery
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
javascript+jQuery实现360开机时间显示效果
Nov 03 jQuery
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
jQuery cookie的公共方法封装和使用示例
Jun 01 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 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
PHP实现懒加载的方法
2015/03/07 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PDO::prepare讲解
2019/01/29 PHP
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
详解Vue之事件处理
2020/07/10 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
天游软件面试
2013/11/23 面试题
综合办公室个人的自我评价
2013/12/22 职场文书
会计学习心得体会
2014/09/09 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python