v-for遍历数组
当我们有一组数据需要进行渲染时,我们就可以使用v-for来完成。v-for的语法类似于JavaScript中的for循环。格式如下 : item in items的形式。我们来看一个简单的案例∶如果在遍历的过程中不需要使用索引值v-for=”movie in movies”依次从movies中取出movie,并且在元素的内容中,我们可以使用Mustache语法,来使用movie如果在遍历的过程中,我们需要拿到元素在数组中的索引值呢?语法格式: v-for=(item, index) in items其中的index就代表了取出的item在原数组的索引值。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- 1、在遍历的过程中,没有使用索引值 -->
<ul>
<li v-for="item in names">{{item}}</li>
</ul>
<!-- 2、在遍历的过程中,获取索引值 -->
<ul>
<li v-for="(item,index) in names">{{index+1}}-{{item}}</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
names: ["why", "kobe", "james", "curry"]
}
})
</script>
</body>
</html>
v-for遍历对象
v-for可以用于遍历对象:比如某个对象中存储着你的个人信息,我们希望以列表的形式展示出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- 1、在遍历对象的过程中,如果只是获取一个值,那么获取到的是value -->
<ul>
<li v-for="item in info">{{item}}</li>
</ul>
<!-- 2、获取key和value (value,key) -->
<ul>
<li v-for="(value,key) in info">{{value}} - {{key}}</li>
</ul>
<!-- 3、获取key和value和index (value,key,index) -->
<ul>
<li v-for="(value,key,index) in info">{{value}} - {{key}} - {{index}}</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
info: {
name: 'why',
age: 18,
height: 1.88
}
}
})
</script>
</body>
</html>
组件的key属性
官方推荐我们在使用v-for时,给对应的元素或组件添加上一个:key属性。为什么需要这个key属性呢(了解)?这个其实和Vue的虚拟DOM的Diff算法有关系。这里我们借用React’ s diff algorithm中的一张图来简单说明一下:当某一层有很多相同的节点时,也就是列表节点时,我们希望插入一个新的节点我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的。即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?所以我们需要使用key来给每个节点做一个唯一标识Diff算法就可以正确的识别此节点找到正确的位置去插入新的节点。所以一句话,key的作用主要是为了高效的更新虚拟DOM。
检测数组更新
因为vue是响应式,所以当数据发生变化时,vue会自动检测数据变化,视图就会发生对应的更新vue中包含了一组观察数组编译的方法,使用它们改变数组也会触发试图的更新push()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// push 在数组后面添加 可以一次增加多个
this.letters.push("aaa");
}
}
})
</script>
</body>
</html>
通过索引修改,分响应式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// 通过索引值修改数组中的元素
this.letters[0] = 'bbb';
}
}
})
</script>
</body>
</html>
点击按钮后数组实际上已经改变了,但是页面没有渲染
pop()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// pop() 从最后删除
this.letters.pop();
}
}
})
</script>
</body>
</html>
shift()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// shift() 删除数组中的第一元素
this.letters.shift();
}
}
})
</script>
</body>
</html>
unshift()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// unshift() 在数组最前面添加元素 可以一次增加多个
this.letters.unshift('ccc');
}
}
})
</script>
</body>
</html>
splice()
删除:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// splice() 可以删除元素,可以插入元素,可以替换元素
// 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后湖面所有的元素)
this.letters.splice(1);
}
}
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// splice() 可以删除元素,可以插入元素,可以替换元素
// 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后湖面所有的元素)
// this.letters.splice(1);
this.letters.splice(1,1);
}
}
})
</script>
</body>
</html>
替换:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// splice() 可以删除元素,可以插入元素,可以替换元素
// 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后湖面所有的元素)
// this.letters.splice(1);
// this.letters.splice(1,1);
// 替换元素:第二个参数,表示要替换几个元素,后面的是用于替换前面的元素
this.letters.splice(1,3,'m','n','l');
}
}
})
</script>
</body>
</html>
插入元素:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
// splice() 可以删除元素,可以插入元素,可以替换元素
// 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后湖面所有的元素)
// this.letters.splice(1);
// this.letters.splice(1,1);
// 替换元素:第二个参数,表示要替换几个元素,后面的是用于替换前面的元素
// splice(start)
// this.letters.splice(1,3,'m','n','l');
// 插入 第二个三处传入0,并且后面跟上要插入的元素
this.letters.splice(1,0,'x','y','z')
}
}
})
</script>
</body>
</html>
sort()
排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['X', 'Y', 'Z', 'D', 'E']
},
methods: {
btnClick() {
// sort()
this.letters.sort();
}
}
})
</script>
</body>
</html>
reverse()
反转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['X', 'Y', 'Z', 'D', 'E']
},
methods: {
btnClick() {
// reverse()
this.letters.reverse();
}
}
})
</script>
</body>
</html>
Vue.set()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in letters">{{item}}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['X', 'Y', 'Z', 'D', 'E']
},
methods: {
btnClick() {
// set(要修改的对象,索引值,修改后的值)
Vue.set(this.letters,0,'bbbbbbb');
}
}
})
</script>
</body>
</html>
本文链接:https://www.zhantian9.com/228372.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2000000@qq.com 举报,一经查实,本站将立刻删除。