Vue的基础语法(二)

一、条件判断

  • v-if、v-else-if、v-else的基本使用
<!--如果条件复杂,则用计算属性来写!-->
<h2 v-if="score>=90">
	优秀
</h2>
<h2 v-else-if="score>=80">
	良好
</h2>
<h2 v-else>
	及格
</h2>
...
<script>
	const app = new Vue({
		data:{
			score: 99
		}
	})
</script>
  • 插入一个小知识点input的复用问题
<!--
	如果两个input在不同条件下显示,
	vue内部会复用,实际上只生成一个input,(当你在输入框输入了内容,然后切换到另一个输入框,里面的内容依然存在的,这就是复用.)
	但如果想区别这两个input,就必须加key这个属性。
-->
<input type="text" id="username" key="username">
<input type="text" id="email" key="email">
  • v-show的基本使用
<!--和v-if的用法相似!-->
<h2 v-show="isShow">
	{{message}}
</h2>
  • v-if和v-show的区别
    1.v-if:当条件为false,包含v-if指令的元素,不存在dom中。
    2.v-show: 当条件为false,包含v-show的元素只是display:none隐藏起来了,仍然存在dom中。

  • 如何选择
    1.切换频繁: v-show
    2.只有一次切换:v-if

二、循环遍历

  • v-for的基本使用
<!--一、数组遍历-->
<!--1.遍历过程中,没有使用索引值-->
names: ['seven','king','yellow'] 
<ul>
	<li v-for="item in names">{{item}}</li>
</ul>

<!--2.遍历过程中,使用索引值-->
<ul>
	<li v-for="(item,index) in names">{{index+1}} {{item}}</li>
</ul>


<!--二、对象遍历-->
<!--1.只获取一个值,获取的是value-->
info:{
	name:'seven',
	age: 18,
	height: 1.8
}
<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>

<!--2.获取key和value、index-->
<ul>
	<li v-for="(value,key,index) in info">{{value}}-{{key}}-{{index}}</li>
</ul>
  • 组件的key属性(在v-for使用过程,建议绑定key!)
<!--
	动态绑定key,key要具有唯一性!
	作用:使vue内部达到性能的利用!
-->
<li v-for="(item,index) in names" :key="index">{{item}}</li>
  • 当插入一个节点时,有key可以快速找到正确的位置并插入,没有key既默认执行diff算法,一个一个地更新。

key的演示

  • 插一个小知识点:数组中哪些方法是响应式的?
    1.push():在数组最后添加元素
    2.pop():删除数组最后一个元素
    3.shift():删除数组第一个元素
    4.unshift():在数组最前面添加元素
    5.splice():删除/插入/替换元素
    6.sort():排序
    7.reverse():翻转数组
    注意:通过索引值修改数组中的元素,不是响应式的!(this.letters[0]=‘aaaa’ )

三、表单绑定

  • v-model:实现表单元素和数据的双向绑定
<div id="app">
	<input type="text" v-model="message">  <!--双向绑定-->
	{{message}}<!--单向绑定-->
</div>
<script>
	const app= new Vue({
		el:"#app",
		data:{
			message:'seven'
		}
	})
</script>
  • v-model的本质/原理
<!--@input:是input内部自带的事件,用于监听用户输入的内容-->
<input type="text" :value="message" @input="valueChange">  
<input type="text" :value="message" @input="message = $event.target.value"> <!--两种写法-->
<script>
...
methods:{
	valueChange(event){
		this.message = event.target.value;
	}
}
</script>

<!--v-model也可以用于textarea元素!-->
  • v-model结合xx类型使用
<!--一、结合radio类型-->
<!--
	1.在没有v-model的情况下,要有name属性,radio才是互斥的。
	2.在有v-model的情况下,可省name属性,因为v-model可以让radio互斥。
-->
<input type="radio" id="male" value="" name="sex" v-model="sex"><input type="radio" id="female" value="" name="sex" v-model="sex"><!--二、结合checkbox类型-->
<!--1.单选框(boolean类型)-->
<input type="checkbox" id="agree" v-model="isAgree">
<script>
	data:{
		isAgree: false;
	}
</script>

<!--2.多选框(数组类型)-->
<input type="checkbox" value="篮球" v-model="hobbies">篮球
<input type="checkbox" value="足球" v-model="hobbies">足球
<script>
	data:{
		hobbies:[]
	}
</script>


<!--三、结合select类型-->
<!--1.单选(字符串类型)-->
<select name="abc" v-model="fruit">
	<option value="苹果">苹果</option>
	<option value="香蕉">香蕉</option>
	<option value="雪梨">雪梨</option>
</select>
<script>
	data:{
		fruit: "香蕉"   //默认初选值
	}
</script>

<!--2.多选(数组类型)-->
<select name="abc" v-model="fruit" multiple>
	<option value="苹果">苹果</option>
	<option value="香蕉">香蕉</option>
	<option value="雪梨">雪梨</option>
</select>
<script>
	data:{
		fruit: []   //默认初选值
	}
</script>
  • v-model的值绑定:动态给value赋值
<!--动态给value赋值的时候,input最好绑定label标签!-->
<label v-for="item in Hobbies" :for="item">
	<input type="checkbox" :value="item" :id="item" v-model="hobbies">{{item}}
</label>

<script>
	data:{
		Hobbies: ['football','baseball','pingpong'],
		hobbies:[]
	}
</script>
  • v-model的修饰符
<!--1. lazy-->
<input type="text" v-model="message">实时绑定
<input type="text" v-model.lazy="message">失去焦点/回车时再绑定

<!--2. number-->
<input type="number" v-model="age">自动当成字符串类型
<input type="number" v-model.number="age">一直为数字类型,可用typeof进行测试~

<!--3. trim-->
<input type="text" v-model="name">输入的内容中,左右两边有很多空格
<input type="text" v-model.trim="name1">去除左右两边的空格!可看下图的演示结果~

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值