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中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
使用jQuery实现简单的tab框实例
Aug 22 jQuery
360提示[高危]使用存在漏洞的JQuery版本的解决方法
Oct 27 jQuery
jquery实现回车键触发事件(实例讲解)
Nov 21 jQuery
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
JQuery中queue方法用法示例
Jan 31 jQuery
jQuery实现动态生成年月日级联下拉列表示例
May 11 jQuery
通过jQuery学习js类型判断的技巧
May 27 jQuery
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
使用jQuery实现购物车
Oct 29 jQuery
jquery实现拖拽添加元素功能
Dec 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
PHP数据缓存技术
2007/02/14 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
js遍历td tr等html元素
2012/12/13 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python线程同步的实现代码
2018/10/03 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
英文版银行求职信
2013/10/09 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
环保公益广告语
2014/03/13 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
公务员检讨书
2014/11/01 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
公司酒会主持词
2015/07/02 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
优化Mysql查询的示例
2022/04/26 MySQL