Add information about key binding (#28209)
* Add information about key binding Also improved grammar and accuracy of information * fix: removed ===== * Update index.md * Update index.md
This commit is contained in:
@ -7,18 +7,14 @@ title: Control Flow
|
|||||||
|
|
||||||
### Conditionals
|
### Conditionals
|
||||||
|
|
||||||
With Vue.js you can decide wheter to show or not a piece of code in you final
|
With Vue.js you can decide whether to show or not a piece of code in your final page, depending on some condition. For example, imagine a form input that requires a text input at least 8 characters long: if the user input is shorter than 8, an error message should appear; but if the input is longer than 8, the message disappears.
|
||||||
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 a condition that determines what is displayed, using a counter:
|
Let's make a simpler example. We want to condition the exibition of a message to a counter:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<p v-if="counter > 10">
|
<p v-if="counter > 10">
|
||||||
This message is only rendered when the counter is greater than 10
|
The counter is greater than 10!
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
@ -32,26 +28,24 @@ let app = new Vue({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
If you go to the console and start to increment the counter, when it crosses our
|
If you go to the console and start to increment `app.counter`, the message will be shown when the counter goes higher than 10! Then, if you decrement `app.counter`, Vue.js will hide the message again once it's lower than 10. For that, we used the directive `v-if`.
|
||||||
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
|
You might be wondering if there's an `else` for that `if`. And there is! The `v-else`.
|
||||||
`v-else`. Notice that the `v-else` will always
|
|
||||||
|
Note that the `v-else` will always:
|
||||||
* expect a `v-if` prior to it
|
* expect a `v-if` prior to it
|
||||||
* refers to the closest `v-if` in the page
|
* refer to the closest `v-if` in the page
|
||||||
|
|
||||||
Let's alter a little bit our first example to get this straight.
|
Let's alter our first example a little bit to get this straight.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<button type="button" @click="counter = counter + 1">Click Me!</button>
|
<button type="button" @click="counter = counter + 1">Click Me!</button>
|
||||||
<p v-if="counter > 10">
|
<p v-if="counter > 10">
|
||||||
This message is only rendered when the counter is greater than 10
|
The counter is greater than 10!
|
||||||
</p>
|
</p>
|
||||||
<p v-else>
|
<p v-else>
|
||||||
And this is the "otherwise" option
|
The counter is less than 10!
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
@ -65,21 +59,20 @@ let app = new Vue({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Play a little with that by changing `counter` values and pay attention to the
|
Play a little with that by changing `app.counter` and pay attention to the
|
||||||
message shown.
|
message shown.
|
||||||
|
|
||||||
Vue.js also has the `v-else-if` directive.
|
Vue.js also has the `v-else-if` directive, which works just like `else if` in regular JavaScript.
|
||||||
|
|
||||||
|
|
||||||
### Loops
|
### Loops
|
||||||
|
|
||||||
Vue.js also helps with the generation of multiple copies of the same code
|
Vue.js Loops help with the repetition of chunks of code. The classic example is a dynamically rendered list:
|
||||||
structure, with loops. The classic example is a list dynamically rendered.
|
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="item in list">
|
<li v-for="(item, index) in list" :key="index">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -100,24 +93,22 @@ let app = new Vue({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Way easier than inserting a lot of `<li>`. And notice that whenever the `list`
|
Way easier than inserting a lot of `<li>`! And notice that whenever the `list` changes, the resulting html will change accordingly. Try it out: open the console and `push` some string to the `list` with
|
||||||
changes, the result will change accordingly. Try it out: open the console and
|
|
||||||
`push` some string to the `list` with
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
app.list.push("something else");
|
app.list.push("something else");
|
||||||
```
|
```
|
||||||
|
|
||||||
As expected, the page rendered now has our brand new item!
|
As expected, the list now has our brand new item!
|
||||||
|
|
||||||
### Accessing current index in loops
|
### Accessing current index in loops and :key
|
||||||
|
|
||||||
`v-for` also supports an optional second argument for the index of the current item:
|
`v-for` also supports an optional second argument for the index of the current item:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(item, index) in items">
|
<li v-for="(item, index) in items" :key="index">
|
||||||
{{ index }}: {{ item }}
|
{{ index }}: {{ item }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -125,3 +116,8 @@ As expected, the page rendered now has our brand new item!
|
|||||||
```
|
```
|
||||||
This way, we can use `index` to style the first, last or even/odd list elements differently, or apply extra logic to our component.
|
This way, we can use `index` to style the first, last or even/odd list elements differently, or apply extra logic to our component.
|
||||||
|
|
||||||
|
In the example above, check out the `:key` attribute. This is a unique variable that Vue uses to help handle dynamically changing data quickly, without having to spend extra time figuring out what elements to add and remove from the html DOM.
|
||||||
|
|
||||||
|
Sometimes, examples will use another variable to pass to `:key`, like a unique ID for each element in a list. We've used a sneaky trick here. You can get the _index_ of the element in an array by using `(element, index) in yourArray`, and set that as the loop's `key`.
|
||||||
|
|
||||||
|
You don't absolutely have to use a `key` attribute, but it is _highly_ recommended.
|
||||||
|
Reference in New Issue
Block a user