- Start
- v-if
- v-for
开始
https://alligator.io/vuejs/hello-world-vuejs/
Vue.js作为一个响应组件快速地流行起来,它是轻量级的,易于掌握的,并且是类似于React和Angular的又一个很好的选择。
让我们从一个最简单的例子开始:
<!DOCTYPE html> <html lang="en">
<head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Hello World in Vue.js</title> </head>
<body> <div id="app"> <h1>{{ msg }}</h> </div> </body>
<script src="https://unpkg.com/vue"></script> <script> var vue = new Vue({ el: "#app", data() { return { msg: "hello world!!!" } } }); </script>
</html>
|
条件指令
https://alligator.io/vuejs/conditional-directives/
v-if
v-else
v-else-if
v-show
v-if
继续上节的例子,我们添加如下代码:
data() { return { msg: "Hello World!", isLoggedIn: false } }
|
<button v-if="isLoggedIn">Logout</button>
|
template元素
v-if
指令只能显示或隐藏元素及其子元素,但它可以通过一个指令控制多个元素:
<template v-if="isLoggedIn"> <label> Logout </button> <button> Logout </button> </template>
|
v-else
<button v-if="isLoggedIn"> Logout </button> <button v-else> Log In </button>
|
v-else-if
<button v-if="isLoggedIn"> Logout </button> <label v-else-if="isLoginDisabled"> Register disabled </label> <button v-else> Log In </button>
|
v-show
v-show
与v-if
很相似,主要区别在于:
v-if
表达式为真时才渲染元素到DOM
v-show
渲染所有元素到DOM,当条件为false时用CSS属性来隐藏元素
v-show
不支持v-else
, v-else-if
使用v-for迭代项目
https://alligator.io/vuejs/iterating-v-for/
v-for
基本使用
data() { return { messages: ['hello', 'vue', 'js'], shoppingItems: [ {name: 'apple', price: '10'}, {name: 'orange', price: '12'} ] } }
|
<ul> <li v-for="msg in messages">{{ msg }}</li> </ul>
<ul> <li v-for="item in shoppingItems"> {{ item.name }} - {{ item.price }} </li> </ul>
|
template元素
<template v-for="item in shoppingItems"> <label> {{ item.name }} </label> <label> {{ item.price }} </label> <button>Buy</button> </template>
|
在对象中使用
data() { return { objectItems: { key1: 'item1', key2: 'item 2', key3: 'item3' } } }
|
<ul> <li v-for="item in objectItems">{{ item }}</li> </ul>
<ul> <li v-for="(item, key, index) in objectItems"> {{ item }} - {{ key }} - {{ index }} </li> </ul>
|
通过Range使用v-for
<ul> <li v-for="item in 15">{{ item }}</li> </ul>
|
Key
改变数组的顺序时,默认情况下Vue会改变每个现有元素中的数据,而不是将DOM元素移动到更新的位置。
我们可以设置Vue跟踪每个元素使用一个key,这将使它移动元素而不是替换值。这些值对于被迭代的数据来说是独一无二的。
<ul> <li v-for="item in shoppingItems" :key="item.name"> {{ item.name }} - {{ item.price }} </li> </ul>
|
管理变化
开箱即用的v-for支持数组突变的方法,它们是push
,pop
,shift
,unshift
,splice
,sort
,reverse
。如果在数组上执行这些操作,v-for将展现处理后的新数据。
过滤列表
使用计算值来过滤
<ul> <li v-for="item in itemsLessThanTen" :key="item.name"> {{ item.name }} - {{ item.price }} </li> </ul>
|
data() { return { shoppingItems: [ {name: 'apple', price: '7'}, {name: 'orange', price: '12'} ] } }, computed:{ itemsLessThanTen: function() { return this.shoppingItems.filter(function(item) { return item.price > 10; }) } }
|
使用方法过滤
<ul> <li v-for="item in filterItems(shoppingItems)" :key="item.name"> {{ item.name }} - {{ item.price }} </li> </ul> ``````
```html data() { return { shoppingItems: [ {name: 'apple', price: '7'}, {name: 'orange', price: '12'} ] } }, methods:{ filterItems: function(items) { return items.filter(function(item) { return item.price > 10; }) } }
|