如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)

发布时间 - 2026-01-11 02:22:13    点击率:

Bootstrap是网上最流行的前端开发框架. 除了用它,我不知道还有其他更快的方法去构建一个响应式的网站。

但是自从我向网页添加动态功能的工具变成vue.js后。适应bootstrap变得困难起来。因为这带来了一些技术包袱。没错。我说的就是jquery。

这并不是在抨击jquery,我只是意识到,当你已经在项目里使用一些像Vue的框架后,再引入jQuery就会出现一些显著的缺点:

增加开销。jQuery将会使你的网页增加30KB。

在使用诸如webpack一类的打包工具时,jquery也会很难与之进行配置。

当你使用Vue负责DOM操作时,你不会愿意Jquery再来将DOM搞的一团糟。

彻底移除jQuery和Bootstrap的javascript插件

这里有一个很棒的项目 vue-strap ,它使用Vue.js 内置的插件来替换Bootstrap中的Javascript插件。因此你可以使用你项目中原有的Bootstrap插件,比如 modals, carousel, tabs, etc. 他们都是基于 Vue 提供支持.

但是如果你只是用一小部分的Bootstrap插件的话, 我觉得自己定制Vue.js的插件也很容易,那样的话你也不需要将整个vue-strap都引用进来(译者注:我就是只用了Vue.js和几个其他需要的plugin  :)

下面让我展示一下怎么使用vue,从零开始设置一些常用的Bootstrap 插件

自己动手做由vue.js驱动的Bootstrap小部件

选项卡

我们将从选项卡开始。每一个选项卡都附带着他的面板. 选项卡的显示/隐藏是通过添加/移除选项卡与面板的class属性中的active来实现的,而这就是Vue将要处理的工作。

<div id="tabs">
 <ul class="nav nav-tabs">
  <li><a>Tab 1</a></li>
  <li><a>Tab 2</a></li>
 </ul>
 <div class="tab-content">
  <div class="tab-pane">Pane 1</div>
  <div class="tab-pane">Pane 2</div>
 </div>
</div>

我们用一个变量tab来跟踪当前被选中的选项卡,并用这个变量来添加/移除选项卡与其对应面板的Class属性中的active:

<div id="tabs">
 <ul class="nav nav-tabs">
  <li v-bind:class="{ active: tab === 1}"><a>Tab 1</a></li>
  <li v-bind:class="{ active: tab === 2}"><a>Tab 2</a></li>
 </ul>
 <div class="tab-content">
  <div class="tab-pane" v-bind:class="{ active: tab === 1}">
   Pane 1</div>
  <div class="tab-pane" v-bind:class="{ active: tab === 2}">
   Pane 2</div>
 </div>
</div>

我们还需要在所有的选项卡上监听点击事件,用来更新我们的tab变量

<div id="tabs">
 <ul class="nav nav-tabs">
  <li v-bind:class="{ active: tab === 1}" v-on:click="tab = 1">
   <a>Tab 1</a>
  </li>
  <li v-bind:class="{ active: tab === 2}" v-on:click="tab = 2">
   <a>Tab 2</a>
  </li>
 </ul>
 <div class="tab-content">
  <div class="tab-pane" v-bind:class="{ active: tab === 1}">
   Pane 1</div>
  <div class="tab-pane" v-bind:class="{ active: tab === 2}">
   Pane 2</div>
 </div>
</div>

最后,js代码:

new Vue({
 el: '#tabs',
 data: { 
  // Tab 1 is selected by default
  tab: 1 
 }
});

这里还有一些我们可以进行的改进与优化,但为了使本文简介的缘故就不展开了:

将JavaScript代表包装成一个Vue组件,以便我们能在整个网站重用这个选项卡代码。

作为一个真正紧凑的模板。将选项卡和对应的面板内容放入一个数组属性中,然后用 v-for来打印出选项卡与面板的列表来。

模态框

 模态对话框是我最喜欢的Bootstrap 插件之一。与选项卡类似,我们通过添加/移除一个in的类来控制模态框的显示/隐藏。而这些通过一个打开和关闭按钮来触发,

<div id="app" v-bind:class=" { 'modal-open': show }">
 <button class="btn btn-primary" v-on:click="toggle">
  Open
 </button>
 <div class="modal" tabindex="-1" v-bind:class="{ in: show }"
  v-bind:style="modalStyle">
  <div class="modal-dialog">
   <div class="modal-content">
    <div class="modal-body">
     <p>Vue-powered modal!</p>
    </div>
   <div class="modal-footer">
    <button class="btn" v-on:click="toggle">Close</button>
   </div>
  </div>
 </div>
 </div>
</div>

对于一个Bootstrap 的模态框,我们需要在对话框上有一个动态的内联样式。 我们通过 v-bind:style 指令来实现,这个指令通过从一个计算属性中接收一个“对象样式”进行的。每次计算属性所依赖的变量变化时,他自己都会重新计算一遍:

new Vue({
 el: '#app',
 data: { 
  show: false 
 },
 methods: {
  toggle() { this.show = !this.show; }
 },
 computed: {
  modalStyle() {
   return this.show ? 
    { 'padding-left': '0px;', display: 'block' } : {};
  }
 }
});

你也可以通过使用Vue的过渡动画在模态框进入和离开DOM时渐变,来增强你的模态框。

让jQuery退休吧,考虑下在下一个Bootstrap 项目中使用Vue.js

不是说你可以在Bootstrap中用vue.js代替jquery,而是说你的确应该这么做。因为不管你是使用vue-strap或自己封装插件,你都可以感到Vue的如下诱人的优势:

与jQuery对比,vue的DOM操作系统允许较高的UI性能和响应性。

Vue是被设计用来建立小型,孤立的UI块的。所以vue编写的小部件将比jquery的更容易扩展,可维护性更好。

Bootstrap的小部件有着臭名昭著的混乱模板, 所以vue可以使用他灵活的模板选项来缓解这个问题,如jsx,单页应用组件,渲染功能,类与样式绑定,等等。

请记住,Vue不支持IE8,但是你可能会考虑在下一个bootstrap项目中使用他。

以上所述是本文的全部内容,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对网站的支持!


# vuejs中使用bootstrap  # jquery移除、绑定、触发元素事件使用示例详解  # jQuery移除或禁用html元素点击事件常用方法小结  # JQuery实现样式设置、追加、移除与切换的方法  # jQuery一键移除使前端项目脱离对它的依赖  # 选项卡  # 模态  # 移除  # 你也  # 当你  # 说你  # 来实现  # 对话框  # 都是  # 几个  # 就会  # 如果你  # 让我  # 是在  # 我不  # 带着  # 中原  # 也会  # 你是  # 我说 


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


相关推荐: Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何获取PHP WAP自助建站系统源码?  JavaScript如何实现路由_前端路由原理是什么  大同网页,大同瑞慈医院官网?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  微信小程序 闭包写法详细介绍  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何在IIS中新建站点并解决端口绑定冲突?  网站建设整体流程解析,建站其实很容易!  如何实现建站之星域名转发设置?  深入理解Android中的xmlns:tools属性  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何快速搭建个人网站并优化SEO?  javascript基于原型链的继承及call和apply函数用法分析  如何选择可靠的免备案建站服务器?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel如何生成API文档?(Swagger/OpenAPI教程)  非常酷的网站设计制作软件,酷培ai教育官方网站?  Android滚轮选择时间控件使用详解  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  制作电商网页,电商供应链怎么做?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何在云主机上快速搭建网站?  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何在建站宝盒中设置产品搜索功能?  如何快速打造个性化非模板自助建站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何用VPS主机快速搭建个人网站?