Top Vue Packages for Changing Metadata, Drag and Drop, and Numeric Inputs

John Au-Yeung - Jan 19 '21 - - Dev Community

Subscribe to my email list now at http://jauyeung.net/subscribe/

Follow me on Twitter at https://twitter.com/AuMayeung

Many more articles at https://medium.com/@hohanga

Even more articles at http://thewebdev.info/

Vue.js is an easy to use web app framework that we can use to develop interactive front end apps.

In this article, we’ll look at how the best packages for changing metadata of our app, adding drag and drop and adding numeric inputs.

vue-head

The vue-head package lets us change the meta tag of our app for better SEO.

First, we install it by running:

npm i vue-head

Enter fullscreen mode Exit fullscreen mode

Then we can use it by writing:

main.js

import Vue from "vue";
import App from "./App.vue";
import VueHead from "vue-head";

Vue.use(VueHead);
Vue.config.productionTip = false;

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

Enter fullscreen mode Exit fullscreen mode

to register the plugin.

Then in our component, we can write:

<template>
  <div></div>
</template>

<script>
export default {
  data(){
    return {
      title: 'title'
    }
  },
  head: {
    title() {
      return {
        inner: this.title
      };
    },
    meta: [{ name: "description", content: "My description", id: "desc" }]
  }
};
</script>

Enter fullscreen mode Exit fullscreen mode

to set the title and meta tag values as we see fit.

We can also pass some options to Vue.use :

import Vue from "vue";
import App from "./App.vue";
import VueHead from "vue-head";

Vue.use(VueHead, {
  separator: "-",
  complement: "complement"
});
Vue.config.productionTip = false;

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

Enter fullscreen mode Exit fullscreen mode

Then we add the separator and the complement text after the separator.

vue-nestable

We can use the vue-nestable to create a tree view that can have items that can be dragged and dropped.

To install it, we run:

npm i vue-nestable

Enter fullscreen mode Exit fullscreen mode

Then we use it by writing:

main.js

import Vue from "vue";
import App from "./App.vue";
import VueNestable from "vue-nestable";

Vue.use(VueNestable);
Vue.config.productionTip = false;

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

Enter fullscreen mode Exit fullscreen mode

App.vue

<template>
  <div>
    <vue-nestable v-model="nestableItems">
      <vue-nestable-handle slot-scope="{ item }" :item="item">{{ item.text }}</vue-nestable-handle>
    </vue-nestable>
  </div>
</template>

<script>
export default {
  data() {
    return {
      nestableItems: [
        { id: 0, text: "foo" },
        { id: 1, text: "bar" },
        { id: 2, text: "baz" }
      ]
    };
  }
};
</script>

Enter fullscreen mode Exit fullscreen mode

We register the plugin and used the vue-nestable component.

v-model has the items that we want to render. It’ll be set to the latest values as the items are dragged and dropped.

vue-nestable-handle has the list of items that are rendered.

They are draggable and they can be dropped at different levels.

The maximum depth and styling can be changed.

vue-slider-component

vue-slider-component lets us create a slider which we can use as a numeric input component.

We install it by running:

npm i vue-slider-component

Enter fullscreen mode Exit fullscreen mode

Then we can use it by writing:

<template>
  <div>
    <vue-slider v-model="value"/>
    <p>{{value}}</p>
  </div>
</template>

<script>
import VueSlider from "vue-slider-component";
import "vue-slider-component/theme/antd.css";

export default {
  components: {
    VueSlider
  },
  data() {
    return {
      value: 0
    };
  }
};
</script>

Enter fullscreen mode Exit fullscreen mode

We imported and registered the vue-slider component.

And we also imported the bundled CSS file.

v-model binds to the value of the slider.

vue-screen-size

We can use the vue-screen-size package to get the screen size of the screen that the app is displayed in.

To install it, we run:

npm i vue-screen-size

Enter fullscreen mode Exit fullscreen mode

Then we can use it by writing:

<template>
  <div>{{$vssWidth }}x{{$vssHeight}}</div>
</template>

<script>
import VueScreenSize from "vue-screen-size";

export default {
  mixins: [VueScreenSize.VueScreenSizeMixin]
};
</script>

Enter fullscreen mode Exit fullscreen mode

We add the package’s bundled mixin.

Then we can use the $vssWidth variable to get the width and $vssHeight to get the height of the screen.

vue-numeric-input

vue-numeric-input provides us with an easy to add numeric input that has increment and decrement buttons to let us change the values.

To install it, we run:

npm i vue-numeric-input

Enter fullscreen mode Exit fullscreen mode

Then we can use it by writing:

main.js

import Vue from "vue";
import App from "./App.vue";
import VueNumericInput from "vue-numeric-input";

Vue.use(VueNumericInput);

Vue.config.productionTip = false;

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

Enter fullscreen mode Exit fullscreen mode

App.vue

<template>
  <div>
    <vue-numeric-input v-model="value" :min="1" :max="10" :step="2"></vue-numeric-input>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: 0
    };
  }
};
</script>

Enter fullscreen mode Exit fullscreen mode

v-model binds the inputted value to the value state.

max is the max value that the input allows.

min is the min value that the input allows.

step is the number which the value increments or decrements by when we press the buttons.

Conclusion

We can add numeric inputs with vue-slider-component and vue-numeric-input.

vue-screen-size lets watch for screen size changes.

vue-head lets us set the metadata for our app.

vue-nestable lets us create a draggable list.

The post Top Vue Packages for Changing Metadata, Drag and Drop, and Numeric Inputs appeared first on The Web Dev.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .