欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

8 - Vue 学习笔记 - v-on的使用、v-if、v-else-if、v-else

程序员文章站 2024-01-05 23:13:35
...

v-on

在前端开发中,我们经常要和用户交互
这个时候,就必须监听用户所做的事件,比如点击,拖拽,键盘事件等等
Vue 中,我们使用 v-on 指令来监听事件

v-on介绍

作用:绑定事件监听器
缩写:@
预期:Function | Inline Statement | Object
参数:event

基本使用
<div id="app">
	<h2>{{counter}}</h2>
	<!-- 可以直接写表达式 -->
	<!-- <button v-on:click="counter++">+</button> -->
	<button v-on:click="increment">+</button>
	<!-- 语法糖,简写 v-on: -> @	-->
	<button @click="decrement">-</button>
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			counter: 0
		},
		methods: {
			increment() {
				this.counter++;
			},
			decrement() {
				this.counter--;
			}
		}
	});
</script>
v-on 参数

当通过 methods 中定义方法,以供 @click 调用时,需要注意参数问题

  • 情况一:在事件监听中,如果该方法不需要额外参数,那么方法后面的 () 可以不添加,也就是只写函数名。但是要注意:如果方法中本身需要一个参数,那么这种做法会默认把原生事件 event 参数传递进去。
  • 情况二:如果同时传入某个参数时,需要 event ,可以通过 $event 传入事件。
<div id="app">
	<!-- 事件调用的方法没有参数	-->
	<button v-on:click="btn1Click()">按钮1</button>
	<button v-on:click="btn1Click">按钮2</button> <!-- 两种方式都可以正常调用 -->
	
	<button @click="btn2Click(123)">按钮3</button> <!-- 控制台打印 123 -->
	<button @click="btn2Click()">按钮4</button> <!-- 打印 undefined -->
	<button @click="btn2Click">按钮5</button> <!-- 打印 event 对象 -->
	<!-- 在事件定义时,写方法时省略了小括号,但是方法本身需要一个参数,这个时候 Vue 会默认将
			 浏览器生产的 event 事件对象作为参数传入到方法 -->
	
	<!-- 方法定义时,我们需要 event 对象,同时有需要其他参数	-->
	<button @click="btn3Click">按钮6</button> <!-- 先打印 event 再打印 undefined -->
	<button @click="btn3Click(123,event)">按钮7</button> <!-- 打印 123 和 undefined ,同时 Vue 报错 -->
	<!-- Vue 会把 event 看成 data 里面的属性,没有找到所以报错	-->
	<!-- 再调用方法时,需要 event 使用 $event -->
	<button @click="btn3Click(123,$event)">按钮8</button> <!-- 正确让第二个参数为 event  -->
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			message: "hello"
		},
		methods: {
			btn1Click() { // 无参函数
				console.log('btn1Click');
			},
			btn2Click(param) { // 需要一个参数
				console.log(param);
			},
			btn3Click(param, event) {
				console.log(param, event);
			}
		}
	});
	
	// 如果函数需要参数,但是也没有传入,也不会报错,函数的形参为 undefined
	function func(name) {
		console.log(name);
	}
	
	func(); // 控制台显示 undefined
</script>
v-on 修饰符

再某些情况下,拿到 event 的目的可能是进行一些事件处理
Vue 提供了修饰符来帮助我们方便的处理一些事件

  • .stop - 调用 event.stopPropagation()
  • .prevent - 调用 event.preventDefault()
  • .{ keyCode | keyAlias } - 只当事件是从特定的键触发时才触发回调
  • .native - 监听组件根元素的原生事件
  • .once - 只触发一次回调
<div id="app">
	<div @click="divClick">
		<button @click="btnClick">按钮1</button>
		<!-- 点击按钮,父元素的事件也会被触发,即事件冒泡 -->
	</div>
	
	<div @click="divClick">
		<!-- 1. 阻止事件冒泡 .stop	-->
		<button @click。stop="btnClick">按钮2</button>
	</div>
	
	<!-- 2. .prevent 修饰符的使用	-->
	<form action="baidu">
		<!-- 我们点击提交 input,会自动提交,如果我们需要我们自己点击以后,通过特定的操作再提交,就要阻止默认的提交行为 -->
		<input type="submit" value="提交1" @click="submitClick"> <!-- 有打印 submitClick,也有提交 -->
		<input type="submit" value="提交2" @click.prevent="submitClick"> <!-- .prevent 阻止了默认事件,只调用了方法,没有提交跳转 -->
	</form>
	
	<!-- 3. 监听某个键盘键的点击	-->
	<input type="text" @keyup="keyUp"> <!-- 我们在这个文本框中每按下抬起一次键盘,就会打印信息 -->
	<input type="text" @keyup.enter="keyUp"> <!-- .enter 只有抬起的键是 Enter 才会打印信息 -->
	
	<!-- 4. .once 修饰符的使用	-->
	<button @click.once="onceClick">once</button> <!-- 只有第一次点击会打印信息,之后就不会打印 -->
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			message: "hello"
		},
		methods: {
			btnClick() {
				console.log('btnClick');
			},
			divClick() {
				console.log('divClick')
			},
			submitClick() {
				console.log('submitClick');
			},
			keyUp() {
				console.log('KeyUp');
			},
			onceClick() {
				console.log('onceClick');
			}
		}
	});
</script>

v-if、v-else-if、v-else 的基本使用

v-if
<div id="app">
	<!-- 在某些情况下。我们希望这个 message 在满足某些情况下再渲染出来,这个时候就可以使用 v-if	-->
	<h2 v-if="false">{{message}}1</h2> <!-- 不显示 -->
	<h2 v-if="isShow">{{message}}2</h2> <!-- 显示 -->
	<!-- v-if="" 里面可以写布尔值,或布尔类型的变量	-->
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			message: "hello",
			isShow: true
		}
	});
</script>

我们可以通过控制台,修改 isShow 的值,观察变化

v-else
<div id="app">
	<h1 v-if="isShow">isShow为true时,显示我</h1>
	<h1 v-else>否则,isShow为false时,显示我</h1>
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			message: "hello",
			isShow: true
		}
	});
</script>

我们可以通过控制台,修改 isShow 的值,观察变化

v-else-if
<div id="app">
	<h2 v-if="score>=90">优秀</h2>
	<h2 v-else-if="score>=80">良好</h2>
	<h2 v-else-if="score>=60">及格</h2>
	<h2 v-else>不及格</h2>
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: "#app",
		data: {
			score: 99
		},
		computed: {
			result() {
				let showMessage = '';
				if (this.score >= 90) {
					showMessage = '优秀';
				} else if (this.score) {
					
				}
			}
		}
	});
</script>

但是一般情况我们不推荐这样使用,当逻辑复杂的时候,我们可以使用到之前学过的 computed 计算属性,这样可以让我们前端页面看起来简洁而不复杂。

// 在 computed 添加如下代码
computed: {
	result() {
		let showMessage = '';
		if (this.score >= 90) {
			showMessage = '优秀';
		} else if (this.score >= 80) {
			showMessage = '良好';
		} else if (this.score >= 60) {
			showMessage = '及格';
		} else {
			showMessage = '不及格';
		}
		return showMessage;
	}
}
// 在 html 中使用 {{result}} 展示
相关标签: vue

上一篇:

下一篇: