如何將 jQuery 從你的 Bootstrap 項(xiàng)目中移除(取而代之使用Vue.js)
Bootstrap是網(wǎng)上最流行的前端開(kāi)發(fā)框架. 除了用它,我不知道還有其他更快的方法去構(gòu)建一個(gè)響應(yīng)式的網(wǎng)站。
但是自從我向網(wǎng)頁(yè)添加動(dòng)態(tài)功能的工具變成vue.js后。適應(yīng)bootstrap變得困難起來(lái)。因?yàn)檫@帶來(lái)了一些技術(shù)包袱。沒(méi)錯(cuò)。我說(shuō)的就是jquery。
這并不是在抨擊jquery,我只是意識(shí)到,當(dāng)你已經(jīng)在項(xiàng)目里使用一些像Vue的框架后,再引入jQuery就會(huì)出現(xiàn)一些顯著的缺點(diǎn):
增加開(kāi)銷(xiāo)。jQuery將會(huì)使你的網(wǎng)頁(yè)增加30KB。
在使用諸如webpack一類(lèi)的打包工具時(shí),jquery也會(huì)很難與之進(jìn)行配置。
當(dāng)你使用Vue負(fù)責(zé)DOM操作時(shí),你不會(huì)愿意Jquery再來(lái)將DOM搞的一團(tuán)糟。
徹底移除jQuery和Bootstrap的javascript插件
這里有一個(gè)很棒的項(xiàng)目 vue-strap ,它使用Vue.js 內(nèi)置的插件來(lái)替換Bootstrap中的Javascript插件。因此你可以使用你項(xiàng)目中原有的Bootstrap插件,比如 modals, carousel, tabs, etc. 他們都是基于 Vue 提供支持.
但是如果你只是用一小部分的Bootstrap插件的話, 我覺(jué)得自己定制Vue.js的插件也很容易,那樣的話你也不需要將整個(gè)vue-strap都引用進(jìn)來(lái)(譯者注:我就是只用了Vue.js和幾個(gè)其他需要的plugin :)
下面讓我展示一下怎么使用vue,從零開(kāi)始設(shè)置一些常用的Bootstrap 插件
自己動(dòng)手做由vue.js驅(qū)動(dòng)的Bootstrap小部件
選項(xiàng)卡
我們將從選項(xiàng)卡開(kāi)始。每一個(gè)選項(xiàng)卡都附帶著他的面板. 選項(xiàng)卡的顯示/隱藏是通過(guò)添加/移除選項(xiàng)卡與面板的class屬性中的active來(lái)實(shí)現(xiàn)的,而這就是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>
我們用一個(gè)變量tab來(lái)跟蹤當(dāng)前被選中的選項(xiàng)卡,并用這個(gè)變量來(lái)添加/移除選項(xiàng)卡與其對(duì)應(yīng)面板的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>
我們還需要在所有的選項(xiàng)卡上監(jiān)聽(tīng)點(diǎn)擊事件,用來(lái)更新我們的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
}
});
這里還有一些我們可以進(jìn)行的改進(jìn)與優(yōu)化,但為了使本文簡(jiǎn)介的緣故就不展開(kāi)了:
將JavaScript代表包裝成一個(gè)Vue組件,以便我們能在整個(gè)網(wǎng)站重用這個(gè)選項(xiàng)卡代碼。
作為一個(gè)真正緊湊的模板。將選項(xiàng)卡和對(duì)應(yīng)的面板內(nèi)容放入一個(gè)數(shù)組屬性中,然后用 v-for來(lái)打印出選項(xiàng)卡與面板的列表來(lái)。
模態(tài)框
模態(tài)對(duì)話框是我最喜歡的Bootstrap 插件之一。與選項(xiàng)卡類(lèi)似,我們通過(guò)添加/移除一個(gè)in的類(lèi)來(lái)控制模態(tài)框的顯示/隱藏。而這些通過(guò)一個(gè)打開(kāi)和關(guān)閉按鈕來(lái)觸發(fā),
<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>
對(duì)于一個(gè)Bootstrap 的模態(tài)框,我們需要在對(duì)話框上有一個(gè)動(dòng)態(tài)的內(nèi)聯(lián)樣式。 我們通過(guò) v-bind:style 指令來(lái)實(shí)現(xiàn),這個(gè)指令通過(guò)從一個(gè)計(jì)算屬性中接收一個(gè)“對(duì)象樣式”進(jìn)行的。每次計(jì)算屬性所依賴(lài)的變量變化時(shí),他自己都會(huì)重新計(jì)算一遍:
new Vue({
el: '#app',
data: {
show: false
},
methods: {
toggle() { this.show = !this.show; }
},
computed: {
modalStyle() {
return this.show ?
{ 'padding-left': '0px;', display: 'block' } : {};
}
}
});
你也可以通過(guò)使用Vue的過(guò)渡動(dòng)畫(huà)在模態(tài)框進(jìn)入和離開(kāi)DOM時(shí)漸變,來(lái)增強(qiáng)你的模態(tài)框。
讓jQuery退休吧,考慮下在下一個(gè)Bootstrap 項(xiàng)目中使用Vue.js
不是說(shuō)你可以在Bootstrap中用vue.js代替jquery,而是說(shuō)你的確應(yīng)該這么做。因?yàn)椴还苣闶鞘褂胿ue-strap或自己封裝插件,你都可以感到Vue的如下誘人的優(yōu)勢(shì):
與jQuery對(duì)比,vue的DOM操作系統(tǒng)允許較高的UI性能和響應(yīng)性。
Vue是被設(shè)計(jì)用來(lái)建立小型,孤立的UI塊的。所以vue編寫(xiě)的小部件將比jquery的更容易擴(kuò)展,可維護(hù)性更好。
Bootstrap的小部件有著臭名昭著的混亂模板, 所以vue可以使用他靈活的模板選項(xiàng)來(lái)緩解這個(gè)問(wèn)題,如jsx,單頁(yè)應(yīng)用組件,渲染功能,類(lèi)與樣式綁定,等等。
請(qǐng)記住,Vue不支持IE8,但是你可能會(huì)考慮在下一個(gè)bootstrap項(xiàng)目中使用他。
以上所述是本文的全部?jī)?nèi)容,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的,在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題
zTree 是一個(gè)依靠 jQuery 實(shí)現(xiàn)的多功能 “樹(shù)插件”。下面通過(guò)本文給大家分享jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題,需要的朋友參考下吧2017-11-11
jQuery多文件異步上傳帶進(jìn)度條實(shí)例代碼
這篇文章主要介紹了jQuery多文件異步上傳帶進(jìn)度條實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
jquery+html5時(shí)鐘特效代碼分享(可設(shè)置鬧鐘并且語(yǔ)音提醒)
這篇文章主要為大家詳細(xì)介紹了Jquery+html5可設(shè)置鬧鐘并且會(huì)語(yǔ)音提醒的時(shí)鐘特效,功能實(shí)現(xiàn)非常簡(jiǎn)單,推薦給大家,有需要的小伙伴可以參考下2015-08-08
Jquery實(shí)現(xiàn)圖片放大鏡效果的思路及代碼(自寫(xiě))
放大鏡類(lèi)的文章網(wǎng)上有很多,由于實(shí)現(xiàn)起來(lái)比較麻煩,所以自己寫(xiě)了一個(gè),下面為大家分享下具體的算法及實(shí)現(xiàn)代碼,感興趣的朋友可以參考下2013-10-10
jQuery插件開(kāi)發(fā)精品教程(讓你的jQuery更上一個(gè)臺(tái)階)
這篇jQuery插件開(kāi)發(fā)教程是小編見(jiàn)過(guò)的最詳細(xì)的了,每個(gè)解說(shuō)都很好,對(duì)于想做增強(qiáng)插件的朋友確實(shí)不錯(cuò)的參考資料,特分享下,方便需要的朋友2015-11-11
JQuery判斷子iframe何時(shí)加載完成解決方案
需要知道iframe何時(shí)加載完成,用JQuery很簡(jiǎn)單就能實(shí)現(xiàn),具體如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08
使用jQuery,Angular實(shí)現(xiàn)登錄界面驗(yàn)證碼詳解
這篇文章主要介紹了使用jQuery,Angular實(shí)現(xiàn)登錄界面驗(yàn)證碼詳解,需要的朋友可以參考下2017-04-04

