翻譯:瘋狂的技術宅 原文:blog.logrocket.com/getting-sta…
Vue.js 是一個流行的 JavaScript 庫,用於在短時間內開發原型。這包括使用者介面、前端應用、靜態網頁和本機移動應用。它以易用的語法和簡單的資料繫結功能而聞名。
最近,Vue.js 生態系統釋出了一個新的軟體包。它是流行的 Bootstrap 框架與 Vue.js 的整合。這個包稱為 BootstrapVue。它允許我們使用與 Bootstrap(v4)整合的自定義元件。 它還支援自定義 Bootstrap 元件、網格系統,還支援 Vue.js 指令。
在本文中,我們將介紹 BootstrapVue 的基礎知識,解釋一般概念,演示設定過程,並通過它構建一個迷你 Vue.js 專案,以便為你提供更多的實踐經驗。
為什麼選擇 BootstrapVue?
鑑於 Bootstrap是最受歡迎的獨立 CSS 框架(在我看來),很多已經或有意向從Vanilla JavaScript 的框架轉移到 Vue.js 的開發人員總是發現遷移有點困難,因為 Bootstrap 對 jQuery 的依賴性很大。
使用 BootstrapVue,任何人都可以從 Vanilla.js 或 jQuery 切換到 Vue.js,而無需擔心 Bootstrap 對 jQuery 的嚴重依賴,甚至無法找到解決方法。這就是 BootstrapVue 的救援方式。它有助於彌補這一差距,並允許 Vue 開發人員能夠輕鬆地在他們的專案中使用 Bootstrap。
入門
使用 webpack、babel 等模組捆綁包時,最好直接把這些包包含到專案中。為了給你演示並提供瞭解和使用 BootstrapVue 的實踐方法,我們將用 BootstrapVue 設定一個 Vue.js 專案,並把它構建到一個功能性的 Vue.js 應用中。
先決條件
- 具備 Vue.js 的基本知識可以幫你理解這個演示
- 在你的電腦上全域性安裝 Vue CLI 。如果你目前尚未安裝,請按照此安裝指南進行操作
Create a Vue project
建立一個Vue專案
首先必須建立一個 Vue.js 專案,我們將會用它來演示 BootstrapVue 元件的實現。在首選目錄上開啟一個終端視窗,然後執行以下命令:
vue create bootstrapvue-demo
複製程式碼
如果你沒有全域性安裝 Vue CLI,請按照此安裝指南進行操作後再繼續本教程。
上面的命令會顯示一個預設的選擇對話方塊,如下所示:
選擇 default,然後單擊Enter繼續:
現在,你建立了一個 Vue 程式,下面轉到新的 Vue 專案目錄,並使用以下命令啟動開發伺服器:
cd bootstrapvue-demo
npm run serve
複製程式碼
你的 Vue 應用程式將會在 localhost:8080 上提供服務。在瀏覽器中開啟它,你將看到自己的Vue應用程式:
將 Bootstrap 和 BootstrapVue 新增到專案中
有兩種方法可以做到這一點,可以用npm和yarn這樣的包管理器或者用CDN連結。
使用npm或yarn
我們將使用npm或yarn安裝之前提到的包。切換到專案的根目錄並執行下面的任一命令,具體取決於你首選的包管理器:
# With npm
npm install bootstrap-vue bootstrap axios
# With yarn
yarn add bootstrap-vue bootstrap axios
複製程式碼
上面的命令將會安裝BootstrapVue和Bootstrap包**。** BoostrapVue包中包含所有BootstrapVue元件,常規Bootstrap包含CSS檔案。另外還安裝了Axios來幫助我們從themealdb API獲取程式所需的資料。
Using CDN
**使用CDN **
要通過CDN將Bootstrap和BootstrapVue新增到Vue專案,請開啟專案公共資料夾中的index.html檔案,並將此程式碼新增到適當的位置:
<!-- public/index.html-->
<!-- Add Bootstrap and Bootstrap-Vue CSS to the <head> section -->
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css"/>
<!-- Add Vue and BootstrapVue scripts just before the closing </body> tag -->
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
複製程式碼
這將把每個庫的縮小版和最新版本引入我們的專案中,非常簡單!但是出於本文的目的,我們將使用第一個方法中的包管理器。下面繼續設定BootstrapVue包。
設定BootstrapVue
接下來,讓我們設定剛剛安裝的BootstrapVue包。轉到你的main.js檔案並將這行程式碼新增到頂部:
//src/main.js
import BootstrapVue from 'bootstrap-vue'
Vue.use(BootstrapVue)
複製程式碼
在這裡做的事情非常簡單,我們匯入了BoostrapVue包,然後用Vue.use()
函式在程式中註冊它,以便Vue程式可以識別。
我們還需要將Bootstrap CSS檔案匯入到專案中。將這段程式碼段新增到main.js檔案中:
//src/main.js
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
複製程式碼
在將必要的模組匯入Vue程式後,你的main.js檔案應該和下面的程式碼段類似:
//src/main.js
import Vue from 'vue'
import App from './App.vue'
import BootstrapVue from 'bootstrap-vue'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
Vue.use(BootstrapVue)
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
複製程式碼
建立Bootstrap元件
下面開始建立我們的第一個元件,第一個元件是Navbar元件**。**轉到元件目錄,建立一個名為Navbar.vue
的檔案,並使用以下程式碼更新它:
//src/components/Navbar.vue
<template>
<div>
<b-navbar toggleable="lg" type="dark" variant="success">
<b-container>
<b-navbar-brand href="#">Mealzers</b-navbar-brand>
<b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
<b-collapse id="nav-collapse" is-nav>
<!-- Right aligned nav items -->
<b-navbar-nav class="ml-auto">
<b-nav-form>
<b-form-input
size="sm"
class="mr-sm-2"
placeholder="Search for a meal"
v-model="meal"
></b-form-input>
<b-button
size="sm"
class="my-2 my-sm-0"
type="submit"
@click.prevent="getMeal"
>Search</b-button>
</b-nav-form>
<b-nav-item-dropdown right>
<!-- Using 'button-content' slot -->
<template slot="button-content"><em>User</em></template>
<b-dropdown-item href="#">Profile</b-dropdown-item>
<b-dropdown-item href="#">Sign Out</b-dropdown-item>
</b-nav-item-dropdown>
</b-navbar-nav>
</b-collapse>
</b-container>
</b-navbar>
</div>
</template>
<script>
export default {
data() {
return {
meal: ''
}
},
methods: {
getMeal() {
...
}
}
}
</script>
複製程式碼
Navbar元件中包含幾個BootstrapVue元件,其中一個是b-navbar
元件。它是Navbar中其他元件的父元件。如果沒有這個元件,Navbar中的所有其他元件將無法正確呈現。
可以用type
屬性更改Navbar上的文字顏色。 Navbar的background-color
也可以用variant
屬性來改變。這些顏色可以是任何正常的Bootstrap預設顏色 —— info
、primary
、success
等。
另一個是b-navbar-brand
元件**。**這是可以呈現網站徽標的地方。它還包含variant
和type
屬性,它們可以分別用於改變background-color
和text-color
。
其他BootstrapVue元件是:
- b-nav-form
- b-nav-item-dropdown
- b-dropdown-item
- b-navbar-toggle
- b-collapse
- b-nav-item(可以用“disabled”屬性禁用)
- b-navbar-nav
- b-nav-item.
- 更多
BootstrapVue元件的一個美妙之處在於它們預設是響應式的。所以你無需編寫額外的程式碼或用外部庫來使其實現響應式。
還有一個元件是Card
元件。card 元件允許我們在卡中顯示影像、文字等。它寫做b-card
**。為了演示它,讓我們在元件目錄中建立一個Cards.vue
檔案。**然後用下面的程式碼更新其內容:
//src/components/Cards.vue
<template>
<b-container>
<div v-if="meals.length">
<b-row>
<div v-bind:key="data.index" v-for="data in meals">
<b-col l="4">
<b-card
v-bind:title="data.strCategory"
v-bind:img-src="data.strCategoryThumb"
img-alt="Image"
img-top
tag="article"
style="max-width: 20rem;"
class="mb-2">
<b-card-text>{{ `${data.strCategoryDescription.slice(0,100)}...` }}</b-card-text>
<b-button href="#" variant="primary">View food</b-button>
</b-card>
</b-col>
</div>
</b-row>
</div>
<div v-else>
<h5>No meals available yet ?</h5>
</div>
</b-container>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
meals: []
};
},
mounted() {
axios
.get("https://www.themealdb.com/api/json/v1/1/categories.php")
.then(response => {
this.meals = response.data.categories;
})
.catch(err => {
console.log(err);
});
}
};
</script>
複製程式碼
為了渲染剛剛建立的Cards元件,需要修改HelloWorld.vue
檔案。開啟它並使用以下程式碼更新:
//src/components/HelloWorld.vue
<template>
<div>
<Cards />
</div>
</template>
<script>
import Cards from './Cards.vue'
export default {
name:'cards',
components: {
Cards
},
data() {
return {
};
},
};
</script>
<style scoped>
</style>
view raw
複製程式碼
在這裡做的是建立一個Cards元件並將其嵌入到HelloWorld.vue
檔案中**。**請注意,在Cards元件中,有一個生命週期hook來修改資料。資料在被渲染到瀏覽器之前被填充到b-card
元件中。
接下來,更新App.vue
檔案,用來捕獲最近的更改並將正確的元件呈現給瀏覽器。開啟它並使用下面的程式碼更新:
//App.vue
<template>
<div id="app">
<Navbar />
<HelloWorld/>
</div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
import Navbar from './components/Navbar.vue';
export default {
name: 'navbar',
components: {
Navbar,
HelloWorld
}
}
</script>
複製程式碼
這是在瀏覽器上可以看到我們的餐飲程式執行如下:
正如你所看到的,card 沒有被正確的佈局,所以必須糾正這一點。幸運的是,BootstrapVue有一些可以將我們的card放在網格中的內建元件。
它們是:
- b-row
- b-col
修改Cards.vue
檔案中的程式碼,使用上面提到的BootstrapVue元件在網格中呈現內容。開啟Cards.vue
檔案並使用下面的程式碼片段更新:
//src/components/HelloWorld.vue
<template>
<b-container>
<div v-if="meals.length">
<b-row>
<div v-bind:key="data.index" v-for="data in meals">
<b-col l="4">
<b-card
v-bind:title="data.strCategory"
v-bind:img-src="data.strCategoryThumb"
img-alt="Image"
img-top
tag="article"
style="max-width: 20rem;"
class="mb-2">
<b-card-text>{{ `${data.strCategoryDescription.slice(0,100)}...` }}</b-card-text>
<b-button href="#" variant="primary">View food</b-button>
</b-card>
</b-col>
</div>
</b-row>
</div>
<div v-else>
<h5>No meals available yet ?</h5>
</div>
</b-container>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
meals: []
};
},
mounted() {
axios
.get("https://www.themealdb.com/api/json/v1/1/categories.php")
.then(response => {
this.meals = response.data.categories;
})
.catch(err => {
console.log(err);
});
}
};
</script>
複製程式碼
現在重新整理瀏覽器,應該看到一個正確佈局的卡片,其中包含渲染內容。
現在有了一個排列工整的餐飲程式。我們用了一些BootstrapVue的元件構建了所有這些。要了解有關BootstrapVue的更多資訊,請檢視官方文件(bootstrap-vue.js.org/docs/)。
遷移
如果你想把現有專案從常規Bootstrap4遷移到BootstrapVue該怎麼辦?這將是一件輕而易舉的事。這就是你需要做的:
- 從構建指令碼中刪除
bootstrap.js
檔案 - 從你的程式中刪除
jQuery
,BootstrapVue能獨立工作 - 將本機Bootstrap標記轉換為BootstrapVue自定義元件標記
就是這些!通過這三個步驟,你可以將現有專案從依賴jQuery的常規Bootstrap遷移到更簡單的獨立BootstrapVue包,而不會破壞任何現有程式碼。
結論
本文通過示例演示了怎樣使用BootstrapVue。我們從安裝開始,在Vue專案中進行設定,最後使用其自定義元件構建Mealzers程式的一部分。可以看到,BootstrapVue模組簡單易用。如果你有常規Bootstrap包的知識,那麼使用BootstrapVue將是輕而易舉的一件事。