Vue:1.v-for循环指令;2.循环案例;3.排序搜索案例

1.v-for循环指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="box">
			<ul>
				<!-- 1.(ele,index) in arr 
				 ele 是你遍历容器中的当前元素
				 index 当前元素的索引
				 arr 是你要遍历的容器		 
				 in/of 都可以使用
				 -->
				<li v-for="(ele,index) in arr" :key="index">{
   
   {index}}--{
   
   {ele}}</li>
			</ul>

			<ul>
				<!-- 2.遍历json数据(v,k,index) in jsonData
				k 键
				v 值
				index为键值对的索引
				为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项提供一个唯一 key attribute:建议尽可能在使用 v-for 时提供 key attribute
				-->
				<li v-for="(k,v,index) in jsonData" :key="k">
					{
   
   {index}}--{
   
   {v}}--{
   
   {k}}
				</li>
			</ul>
			<!--遍历json数组(obj,index) -->
			<ol>
				<li v-for="(obj,index) in jsonArr" :key="index">
					{
   
   {obj.username}}--{
   
   {obj.age}}
				</li>
			</ol>
		</div>
	</body>
</html>
<script type="text/javascript">
	new Vue({
     
     
		el: "#box",
		data: {
     
     
			arr: [10, 20, 30, 40, 50],
			jsonData: {
     
     
				"username": "张三",
				"age": 23,
			},
			jsonArr: [{
     
     
				"username": "张三",
				"age": 23,
			}, {
     
     
				"username": "李四",
				"age": 24,
			}, {
     
     
				"username": "王五",
				"age": 25,
			}]
		}
	})
</script>

运行结果为:
在这里插入图片描述

2.循环案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<!--Vue 视图---数据  数据一变化,视图就会更新,你自己不要想着去操作DOM -->
		<div id="box">
			<ul>
				<li v-for="(obj,index) in jsonArr">
					序号:{
   
   {index}}---姓名:{
   
   {obj.name}}--年龄:{
   
   {obj.age}}--性别:{
   
   {obj.sex}}--
					<a href="#" @click="delObj(index,obj.name)">删除</a>--
					<a href="#" @click="updateObj(index,myobj)">修改</a>
				</li>
			</ul>
		</div>
	</body>
</html>
<script type="text/javascript">
	new Vue({
     
     
		el: "#box",
		data: {
     
     
			jsonArr: [{
     
     
				"name": "张三",
				"age": 23,
				"sex": "男"
			}, {
     
     
				"name": "李四",
				"age": 24,
				"sex": "男"
			}, {
     
     
				'name': '王五',
				'age': 25,
				'sex': '男'
			}],
			myobj: {
     
     
				"name": "赵六",
				"age": 26,
				"sex": "男"
			}
		},
		methods: {
     
     
			delObj(index, name) {
     
     
				//alert(index);
				//根据索引来删除
				if (confirm("你确认要删除" + name + "吗?")) {
     
     
					/*  
					 数组更新检测
					 变更方法
					 
					 Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:	 
					     push() 往数组中后面添加元素
					     pop()  删除数组后面的元素
					     shift() 删除数组前面的元素
					     unshift() 往数组中前面添加元素
					     splice() 根据索引删除
					     sort() 排序
					     reverse() 反转
					 */
					this.jsonArr.splice(index, 1);
				}

			},
			updateObj(index, obj) {
     
     
				//根据索引来更新元素
				//alert(obj);
				//this.jsonArr[index]=obj 这个方式,数组中的元素,被你改了,但是视图没有侦听到,没有触发视图的更新
				this.jsonArr.splice(index, 1, obj);
				// this.jsonArr[index]=obj;
				// this.jsonArr.reverse().reverse();
			}
		}
	})
</script>

运行结果为:
在这里插入图片描述

3.排序搜索案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<style>
		li {
     
     
			list-style-type: none;
		}
	</style>
	<body>
		<div id="box" align="center">
			<input type="" name="" id="" value="" placeholder="请输入内容" v-model="content" />
			<ul>
				<li v-for="(obj,index) in newArr " :key="index">
					{
   
   {index+1}}---{
   
   {obj.name}}---{
   
   {obj.age}}---{
   
   {obj.sex}}
				</li>
			</ul>
			<button type="button" @click="mySort(1)">升序</button>
			<button type="button" @click="mySort(2)">降序</button>
		</div>
	</body>
</html>
<script type="text/javascript">
	new Vue({
     
     
		el: "#box",
		data: {
     
     
			content: '',
			jsonArray: [{
     
     
				'name': '张三',
				'age': 23,
				'sex': '男'
			}, {
     
     
				'name': '李四',
				'age': 24,
				'sex': '男'
			}, {
     
     
				'name': '王五',
				'age': 25,
				'sex': '男'
			}, {
     
     
				'name': '赵六',
				'age': 26,
				'sex': '男'
			}]
		},
		computed: {
     
     
			newArr: function() {
     
     
				var neirong = this.content
				console.log("this.content,计算属性对应的函数就会调用")
				//根据用户输入的内容,从旧数组中过滤新的内容放到新数组中返回
				var myArr = this.jsonArray.filter(function(ele) {
     
     
					/* if(ele.name.indexOf(neirong)!=-1){
						return true;
					}else{
						return false;;
						
					}*/
					//alert(this);这里的this不是vue对象,而是window对象
					console.log(this);
					return ele.name.indexOf(neirong) != -1;
				})

				//箭头函数 es6的语法 箭头函数中的this可以根据上下文的环境
				//
				// var myArr=this.jsonArray.filter(ele=>ele.name.indexOf(this.content)!=-1)

				return myArr;
			}
		},
		methods: {
     
     
			mySort(num) {
     
     
				if (num == 1) {
     
     
					//按照年龄升序排序
					this.jsonArray.sort(function(a, b) {
     
     
						return a.age - b.age;
					});

				} else if (num == 2) {
     
     
					this.jsonArray.sort((a, b) => b.age - a.age);
				}
			}
		}
	})
</script>

运行结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45631296/article/details/115402575
今日推荐