Vue.js列表渲染绑定jQuery插件的正确姿势

发布时间 - 2026-01-11 02:06:43    点击率:

使用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官方文档自定义指令

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Vue.js  # 列表渲染  # jQuery  # Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)  # VUEJS实战之构建基础并渲染出列表(1)  # 深入理解Vue 的条件渲染和列表渲染  # 详解vuejs之v-for列表渲染  # vue.js基于v-for实现批量渲染 Json数组对象列表数据示例  # Vue列表页渲染优化详解  # Vue.JS入门教程之列表渲染  # Vue.js学习教程之列表渲染详解  # Vue 监听列表item渲染事件方法  # Vue前端高效开发之列表渲染指令  # 绑定  # 自定义  # 定值  # 几个  # 很好  # 修饰符  # 去找  # 可选  # 不包括  # 回调  # 大家多多  # 到该  # 可以用来  # 这并  # 不是一种  # 文档  # 列表中  # 赋予了  # color  # function 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建自助建站会员专属系统?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  ,怎么在广州志愿者网站注册?  如何用y主机助手快速搭建网站?  JS弹性运动实现方法分析  浅谈javascript alert和confirm的美化  电商网站制作价格怎么算,网上拍卖流程以及规则?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  ,在苏州找工作,上哪个网站比较好?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  公司网站制作需要多少钱,找人做公司网站需要多少钱?  网站建设整体流程解析,建站其实很容易!  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  JS去除重复并统计数量的实现方法  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  如何在云服务器上快速搭建个人网站?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何用PHP快速搭建CMS系统?  如何彻底卸载建站之星软件?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何快速生成专业多端适配建站电话?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Thinkphp 中 distinct 的用法解析  详解MySQL数据库的安装与密码配置  Python进程池调度策略_任务分发说明【指导】  利用vue写todolist单页应用  如何快速生成ASP一键建站模板并优化安全性?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  如何在香港免费服务器上快速搭建网站?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Android使用GridView实现日历的简单功能  Laravel如何记录自定义日志?(Log频道配置)  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何在搬瓦工VPS快速搭建网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何为API生成Swagger或OpenAPI文档  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤