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 组件加上清除功能的方法(详解)
Apr 13 jQuery
jQuery+PHP+Mysql实现抽奖程序
Apr 12 jQuery
jQuery实现html双向绑定功能示例
Oct 09 jQuery
jQuery 防止相同的事件快速重复触发方法
Feb 08 jQuery
jQuery 实现批量提交表格多行数据的方法
Aug 09 jQuery
jQuery选择器之基本选择器用法实例分析
Feb 19 jQuery
jquery实现动态创建form并提交的方法示例
May 27 jQuery
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
如何基于jQuery实现五角星评分
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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
基于python 字符编码的理解
2017/09/02 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
python文字转语音实现过程解析
2019/11/12 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
服务之星获奖感言
2014/01/21 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android