---
title: Control Flow
---
## Control Flow
### Conditionals
With Vue.js you can decide wheter to show or not a piece of code in you final
page, depending on some condition. For example, imagine a form input that is
required a text at least 8 characters long: if the user input is shorter than 8,
than an error message should appear; but if the input is longer than 8, the
message disappears.
But let's make a simpler example. We want to condition the exibition of a
message to a counter:
```html
  
    This message is only rendered when the counter is greater than 10
  
 
```
```javascript
let app = new Vue({
  el: '#app',
  data: {
    counter: 0
  }
});
```
If you go to the console and start to increment the counter, when it crosses our
threshold of 10, the message will be shown! Then, if you decrement `counter`,
Vue.js will hide the message when `counter` gets lower than 10. For that, we
used the directive `v-if`.
And you might be wondering if there's an `else` for that `if`. And there is the
`v-else`. Notice that the `v-else` will always
* expect a `v-if` prior to it
* refers to the closest `v-if` in the page
Let's alter a little bit our first example to get this straight.
```html
  
    This message is only rendered when the counter is greater than 10
  
  
    And this is the "otherwise" option
  
 
```
```javascript
let app = new Vue({
  el: '#app',
  data: {
    counter: 0
  }
});
```
Play a little with that by changing `counter` values and pay attention to the
message shown.
Vue.js also has the `v-else-if` directive.
### Loops
Vue.js also helps with the generation of multiple copies of the same code
structure, with loops. The classic example is a list dynamically rendered.
```html
```
```javascript
let app = new Vue({
  el: '#app',
  data: {
    list: [
      "shave",
      "do the dishes",
      "clean the sink",
      "pay the bill"
    ]
  }
});
```
Way easier than inserting a lot of ``. And notice that whenever the `list`
changes, the result will change acordingly. Try it out: open the console and
`push` some string to the `list` with
```javascript
app.list.push("something else");
```
As expected, the page rendered now has our brand new item!
### Accessing current index in loops
`v-for` also supports an optional second argument for the index of the current item:
```html
```
This way, we can use `index` to style the first, last or even/odd list elements differently, or apply extra logic to our component.