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 EasyUI的一些常用组件
Jul 12 jQuery
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
基于jQuery的表单填充实例
Aug 22 jQuery
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
jquery实现动态改变css样式的方法分析
May 27 jQuery
jQuery表单选择器用法详解
Aug 22 jQuery
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 jQuery
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
用jQuery实现抽奖程序
Apr 12 jQuery
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
jQuery中getJSON跨域原理的深入讲解
Sep 02 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
php根据年月获取季度的方法
2014/03/31 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
JS 自定义带默认值的函数
2011/07/21 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
JavaScript中继承用法实例分析
2015/05/16 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
python代码制作configure文件示例
2014/07/28 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
python实现验证码识别功能
2018/06/07 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
酒店管理专业学生求职信
2013/09/27 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
产品质量保证书
2014/04/29 职场文书
八项规定对照检查材料
2014/08/31 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
浅谈pytorch中的dropout的概率p
2021/05/27 Python
python字典的元素访问实例详解
2021/07/21 Python
Elasticsearch 聚合查询和排序
2022/04/19 Python
Java版 单机五子棋
2022/05/04 Java/Android
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript