DEV Community

Ahmet Meliksah Akdeniz
Ahmet Meliksah Akdeniz

Posted on

Vue.js Baiscs Part 1

In this Vue.js series I will dig in to Vue documentation. First, I will go over the Vue tutorial.

Since I'm working on browser with Vue for now, this tutorial will not include how to set up Vue.js

Using Script and Template Tags - Declarative Rendering

In script tags we write our JS code and script of the file that extends to HTML. We use states from here and make changes on our HTML.

You will see data(){} below, that's where we store our data. It must return something, otherwise it won't work. We can use values in our data() inside our <template> tags, that is where HTML stays.

<script>
export default {
  data () {
    return {
      msg: "Hello Vue!" // msg is property key || "Hello Vue!" is property value
    }
  }
}
</script>

<template>
  <h1> {{msg}} !</h1>
</template>
Enter fullscreen mode Exit fullscreen mode

To use values in data, we need to type our property keys msg in this case in double curly-bracets (a.k.a. mustache syntax)

Bind Attributes

In the code below, I simply have a property key called titleClass and it has property value of "title". title gets its styling from style tags. Shine your CSS skills in style tags :)

<script>
export default {
  data() {
    return {
      titleClass: "title",
    };
  },
};
</script>

<template>
  <h1 v-bind:class="titleClass">Change the color of this title</h1>
</template>

<style>
.title {
  color: red;
}
</style>

Enter fullscreen mode Exit fullscreen mode

Shorthand for v-bind is :

To bind attributes in Vue, we use v- prefix. So, to bind attributes we need to use v-bind: code that comes after colon : is the argument.

Event Listeners

Use v-on: to use event listeners in Vue. I'm lazy, do we have a shortcut? Sure, it's @. So, instead of typing v-on:click, you can type @. This time, I will go with shortcut version of v-on:

<script>
export default {
  data() {
    return {
      count: 0
        }
    },
    methods: {
      increment() {
        this.count++
      }
    }
  }
</script>

<template>
  <!-- make this button work -->
  <button @click="increment">count is: {{ count }}</button>
</template>
Enter fullscreen mode Exit fullscreen mode

The code block above has a button. It calls the increment method when clicked (@ or v-on:click remember?). When you want to access your property keys in data(){} you must use the this keyword to get it in your methods. Otherwise, Vue won't know what you're referring to. That's because I'm coding in options style, and won't bother to get into detail about that here :)

v-on and v-bind, or just use v-model - Form Bindings

In the code below, to type something inside an input and to render (get the value on your screen) its value we need a combination of v-on: and v-bind. With v-bind: we access the value of text, and with v-on: we call the onInput method that takes event as a parameter. To get the value we simply need something.target.value. Our parameter is event e, so to say e.target.value to get the value inside input. More, text property key (which is an empty string initially) will be assigned to the value inside the input.

<script>
export default {
  data() {
    return {
      text: "",
    };
  },
  methods: {
    onInput(e) {
      this.text = e.target.value;
    },
  },
};
</script>

<template>
  <input v-bind:value="text" v-on:input="onInput" placeholder="Type here" />
  <p>{{ text }}</p>
</template>
Enter fullscreen mode Exit fullscreen mode

However, Vue.js makes things simpler for us and gives us the v-model: which combines v-bind: and v-on:. With v-model:, we do not need to call the function explicitly. Here it's:

<script>
export default {
  data() {
    return {
      text: "",
    };
  },
  methods: {
    onInput(e) {
      this.text = e.target.value;
    },
  },
};
</script>

<template>
  <input v-model="text" placeholder="Type here" />
  <p>{{ text }}</p>
</template>
Enter fullscreen mode Exit fullscreen mode

In other words, I removed v-on: completely and changed v-bind with v-model=.

Conditional Rendering

Use v-if="" v-else="" and if you have more conditions v-else-if for conditional rendering. If the condition is not satisfied, Vue doesn't render it. And that's the main difference between v-if and v-show. v-show renders in any case.

<script>
export default {
  data() {
    return {
      awesome: true,
    };
  },
  methods: {
    toggle() {
      this.awesome = !this.awesome;
    },
  },
};
</script>

<template>
  <button @click="toggle">toggle</button>
  <h1 v-if="awesome">Vue is awesome!</h1>
  <h1 v-else>Svelte are coming!</h1>
</template>
Enter fullscreen mode Exit fullscreen mode

If awesome is true render <h1 v-if="awesome">Vue is awesome!</h1>, else render <h1 v-else>Svelte are coming!</h1>

Before I finish part, I want to talk about this line this.awesome = !this.awesome. This means, next value will be opposite of the current value when event listener is triggered. If current value is falsy, next value will be truthy and vice versa.

To sum it up, in this part we talked about declarative rendering (mustache syntax), bind attributes (v-bind), event listeners (v-on), form bindings (v-model), conditional rendering (v-if, v-else, v-else-if)

This is the end of part 1, I will go over v-for in the next part.

};


toggle

Vue is awesome!


Svelte are coming!





If `awsome` is `true ` render `<h1 v-if="awesome">Vue is awesome!</h1>`, else render `<h1 v-else>Svelte are coming!</h1>`

Before I finish part, I want to talk about this line `this.awesome = !this.awesome`. This means, next value will be opposite of the current value when event listener is triggered. If current value is falsy, mext value will be truthy and vice verca.

To sum it up, in this part we talked about declarative rendering (mustache syntax), bind attributes (v-bind), event listeners (v-on), Form Bindings (v-model), conditional rendering (v-if, v-else, v-else-if)

This is the end of part 1, I will go over `v-for` in the next part.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)