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 相关文章推荐
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 jQuery
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
jquery animate动画持续运动的实例
Nov 29 jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
Apr 26 jQuery
jQuery实现列表的增加和删除功能
Jun 14 jQuery
jQuery中$原理实例分析
Aug 13 jQuery
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
JQuery事件委托原理与用法实例分析
May 13 jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
jquery实现简易验证插件封装
Sep 13 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删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
PHP实现变色验证码实例
2014/01/06 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
Python循环语句之break与continue的用法
2015/10/14 Python
python的re模块使用方法详解
2019/07/26 Python
python实现加密的方式总结
2020/01/19 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
Linux的主要特性
2016/09/03 面试题
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
上课打牌的检讨书
2014/02/15 职场文书
投标承诺函格式
2015/01/21 职场文书
目标责任书格式范文
2015/05/11 职场文书
酒店厨房管理制度
2015/08/06 职场文书
小学副班长竞选稿
2015/11/21 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书