Loading episodes…
0:00 0:00

Add Bootstrap 4 with Vue CLI 3/4

00:00
BACK TO HOME

Add Bootstrap 4 with Vue CLI 3/4

10xTeam August 12, 2020 6 min read

In this tutorial, we’ll see by example how to integrate Bootstrap 4 with Vue.js using Bootstrap-Vue and Vue CLI.

We’ll particularly see how to use the Bootstrap Vue CLI plugin via the vue add @techiediaries/bootstrap command to quickly install Bootstrap in your Vue project without much hassle.

Bootstrap 4 is a popular HTML/CSS framework for building responsive websites. However, for most components that need JavaScript, jQuery is required. Let’s see how to use Bootstrap 4 with Vue.js using Bootstrap-Vue that provides an implementation without depending a jQuery.

Using Bootstrap 4 with Vue.js

Since Bootstrap depends on jQuery, using it with with Vue.js is somehow tricky. So the community has created some implementations that remove the jQuery requirement:

In this tutorial, we’ll see how to use Bootstrap-Vue.

How to Use Bootstrap-Vue

You can use Bootstrap-Vue in various way such as:

  • Installing it from npm using the npm i bootstrap-vue command,
  • Using vue-cli templates to scaffold preconfigured projects such as webpack simple and webpack,
  • Using the Bootstrap Vue CLI plugin via the vue add @techiediaries/bootstrap command

Step 1 - Installing Vue CLI 4

Let’s get started by installing Vue CLI in our development machine.

Head over to a command line interface and run the following command:

$ npm i -g vue-cli

Next, we initialize our Vue project using the following command:

$ vue create vuebootstrapdemo

Simply, press Return to accept the defaults.

Next, navigate to your project’s folder and run the development server:

$ cd vuebootstrapdemo
$ npm run serve

You’ll be able to see the following interface if you go to http://localhost:8080/ with your web browser:

Vue.js splash page

Next, open a new command-line interface and navigate to your project’s folder and run the following command to add Bootstrap-Vue to your project without much hassle:

$ cd vuebootstrapdemo
$ vue add @techiediaries/bootstrap

This is our project’s structure:

├── index.html
├── node_modules
│   └── ...
├── package.json
├── package-lock.json
├── README.md
├── src
│   ├── App.vue
│   ├── assets
│   │   └── logo.png
│   └── main.js
└── webpack.config.js

We’ll be working mainly with the App.vue and main.js files. If you open the src/main.js file, you’ll be able to see the following code, which imports the Bootstrap style sheet and Bootstrap-Vue:

import '@babel/polyfill'
import 'mutationobserver-shim'
import Vue from 'vue'
import './plugins/bootstrap-vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

Next, if you open the src/plugins/bootstrap-vue.js file, you’ll see the following code:

import Vue from 'vue'

import BootstrapVue from 'bootstrap-vue'
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'

Vue.use(BootstrapVue)

This is the code for importing Bootstrap 4 and Bootstrap-Vue in our project which were added automatically by the plugin.

Working With Bootstrap-Vue Components

Let’s now see how to use some Bootstrap-Vue components in our project.

Open the src/App.vue file and update it with this example from the official docs:

<template>
  <div>
    <b-form @submit="onSubmit" @reset="onReset" v-if="show">
      <b-form-group
        id="input-group-1"
        label="Email address:"
        label-for="input-1"
        description="We'll never share your email with anyone else."
      >
        <b-form-input
          id="input-1"
          v-model="form.email"
          type="email"
          required
          placeholder="Enter email"
        ></b-form-input>
      </b-form-group>

      <b-form-group id="input-group-2" label="Your Name:" label-for="input-2">
        <b-form-input
          id="input-2"
          v-model="form.name"
          required
          placeholder="Enter name"
        ></b-form-input>
      </b-form-group>

      <b-form-group id="input-group-3" label="Food:" label-for="input-3">
        <b-form-select
          id="input-3"
          v-model="form.food"
          :options="foods"
          required
        ></b-form-select>
      </b-form-group>

      <b-form-group id="input-group-4">
        <b-form-checkbox-group v-model="form.checked" id="checkboxes-4">
          <b-form-checkbox value="me">Check me out</b-form-checkbox>
          <b-form-checkbox value="that">Check that out</b-form-checkbox>
        </b-form-checkbox-group>
      </b-form-group>

      <b-button type="submit" variant="primary">Submit</b-button>
      <b-button type="reset" variant="danger">Reset</b-button>
    </b-form>
    <b-card class="mt-3" header="Form Data Result">
      <pre class="m-0"></pre>
    </b-card>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        form: {
          email: '',
          name: '',
          food: null,
          checked: []
        },
        foods: [{ text: 'Select One', value: null }, 'Carrots', 'Beans', 'Tomatoes', 'Corn'],
        show: true
      }
    },
    methods: {
      onSubmit(evt) {
        evt.preventDefault()
        alert(JSON.stringify(this.form))
      },
      onReset(evt) {
        evt.preventDefault()
        // Reset our form values
        this.form.email = ''
        this.form.name = ''
        this.form.food = null
        this.form.checked = []
        // Trick to reset/clear native browser form validation state
        this.show = false
        this.$nextTick(() => {
          this.show = true
        })
      }
    }
  }
</script>

Conclusion

In this tutorial, we’ve seen how to use Bootstrap-Vue using Vue CLI 4 to add Bootstrap-like components to Vue.js applications.


Join the 10xdev Community

Subscribe and get 8+ free PDFs that contain detailed roadmaps with recommended learning periods for each programming language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates.

Audio Interrupted

We lost the audio stream. Retry with shorter sentences?