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表单验证(简单)
May 23 jQuery
基于jQuery的表单填充实例
Aug 22 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
jQuery中DOM操作原则实例分析
Aug 01 jQuery
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 jQuery
用jQuery实现抽奖程序
Apr 12 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
YII中assets的使用示例
2014/07/31 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP中header用法小结
2016/05/23 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
jQuery设计思想
2017/03/07 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
python线程池的实现实例
2013/11/18 Python
Pyramid添加Middleware的方法实例
2013/11/27 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
zookeeper python接口实例详解
2018/01/18 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python xlwt模块使用代码实例
2020/06/10 Python
Python 代码调试技巧示例代码
2020/08/11 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
幼师自我鉴定范文
2013/10/01 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
以下牛机,你有几个
2022/04/05 无线电