Vue常用知识

1.Vue入门

1.1 插值表达式{{ xxx }}
1.2 vue.js引用:

①下载后本地引用;
②引用在线js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>入门案例</title>
</head>
<body>
	<div id="app">
		<!-- 插值表达式 {{}} -->
		<h1>{{hello}}</h1>
	</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
	const app=new Vue({
		el:("#app"),
		data:{
			hello:"测试"
		}
	});
</script>
</body>
</html>

2 常用指令

2.1 v-cloak指令

设置隐藏样式,在解析对应的数据前隐藏为编译的标签格式“{{xxx}}”

2.2 v-text 指令

直接展示解析后的数据

2.3 v-html指令

可解析并展示带有html标签的内容

2.4 v-pre指令

跳过解析,可在页面直接显示“{{xxx}}”

2.5 v-once指令

配置该标签只解析一次,即使后续对应的该值改变,页面数据不变

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>指令练习</title>
		<style>
			[v-cloak]{
				display: none;
			}
		</style>
	</head>
	<body>
		<div id="app" >
			测试1:测试v-cloak指令
			<h1 v-cloak>{{msg}}</h1>
			<hr>
			测试2:测试v-text指令
			<h2 v-text="msg"></h2>
			<hr>
			测试3:测试v-html指令<br>
			<span v-html="html"></span>
			<hr>
			测试4:测试v-pre指令:展现{{msg}},不需要vue解析;v-pre直接跳过配置了该指令的表达式<br>
			<span v-pre >{{msg}}</span>
			<hr>
			测试5:测试v-once指令 元素只解析一次,之后用户随意修改,数据不变<br>
			<span v-once >{{one}}</span>
		</div>

		<script src="../js/vue.js">
		</script>
		<script>
			//sleep(1000);
			let app = new Vue({
				el: "#app",
				data: {
					msg: "测试数据",
					html: '<h3>测试html语法</h3>',
					one:'只加载一次'
				}
			})
		</script>

	</body>
</html>

在这里插入图片描述

3 数据双向绑定

3.1 v-model:只能标记可以编辑的标签;输入框以及vue属性两者任一变化另一个跟着变化,数据和页面两者同步修改

<body>
		<div id="app">
		<!-- v-model:只能标记可以编辑的标签 输入框以及vue属性两者任一变化另一个跟着变化
		数据和页面两者同步修改
		-->
		数据录入:<input type="text" v-model="msg" />
		</div>
		<script src="../js/vue.js"></script>
		<script type="text/javascript">
			const app=new Vue({
				el: "#app",
				data: {
					msg: '测试数据'
				}
			})
		</script>
	</body>

4 常用事件

4.1 点击事件v-on:click

4.1.1 可直接配置事件操作内容
4.1.2 可简化操作v-on用@代替
4.1.3 配置方法时间,在methods中增加相关方法,在没有参数时可省略参数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			数值:{{num}} 
			<!-- 1.1 直接编辑操作内容 -->
			<button v-on:click="num++">增加1</button>
			<!-- 1.2 v-on:简化操作@ -->
			<button @click="num--">减少1</button>
			<!-- 1.3 -->
			<button @click="addNum">增加1</button>
		</div>
		<script src="../js/vue.js"></script>
		<script>
			const app=new Vue({
				el: "#app",
				data: {
					num: 1
				},
				methods: {
					/* addNum: function(){
						alert(111)
					} */
					//省略写法
					addNum(){
						this.num++;
					}
				}
			})
		</script>
	</body>
</html>

4.2 事件修饰符

4.2.1 stop 阻止事件冒泡
事件冒泡:由于嵌套关系,先执行内部事件,如果执行成功,则事件冒泡给外层事件
4.2.2 prevent 阻止默认事件
form表单的action提交,a标签的跳转

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			数值:{{num}}
			<!--1. stop 阻止事件冒泡
			 事件冒泡:由于嵌套关系,先执行内部事件,如果执行成功,则事件冒泡给外层事件-->
			<div @click="addNum1">
				<button @click="addNum2">增加2</button>
				<button @click.stop="addNum2">增加1</button>
			</div>
			
			<!-- 2.prevent 阻止默认事件 -->
			<a href="http://www.baidu.com" @click.prevent="btnA">百度</a>
			<div>
				<form></form>
			</div>
		</div>
		<script src="../js/vue.js"></script>
		<script>
			const app = new Vue({
				el: "#app",
				data: {
					num: 1
				},
				methods: {
					addNum1() {
						this.num++;
					},
					addNum2() {
						this.num++;
					}
				}
			})
		</script>
	</body>
</html>

5.常用属性

5.1 v-model属性

1.number 将用户输入变为数字类型
2.trim 去除开头和结尾的空格,字符串中间的空格不能去除
3.lazy 懒加载,当input中控件失去焦点时再触发,–防止重复交互刷新

5.2 计算属性
  1. 计算属性如果调用多次,则有缓存机制,只计算一次
  2. 方法如果调用多次,则每次都要重新执行方法
    页面涉及多次调用并需要计算时使用计算属性
<body>
		<div id="app">
			<form>
				姓名:<input type="text" v-model="user.username"/><br />
				详情:<textarea v-model="user.info"></textarea><br />
				城市:<select name="city" v-model="user.city" multiple="multiple">
					<option value="北京">北京</option>
					<option value="上海">上海</option>
					<option value="成都">成都</option>
				</select><br />
				性别:<input type="radio" name="sex" value="" v-model="user.gender"/><input type="radio" name="sex" v-model="user.gender" value=""/><br />
			</form>
			
			<!-- 1.number 将用户输入变为数字类型
				 2.trim 去除开头和结尾的空格
				 3.lazy 懒加载,当input中控件失去焦点时再触发,--防止重复交互刷新
			 -->
			<div>
				<input type="text" v-model.number="num" /><button @click="num+=10">增加10</button><br>
				<input type="text" v-model="name" />获取name长度{{name.length}}<br>
				<input type="text" v-model.trim="name1" />获取name长度{{name1.length}}<br>
				
				<input type="text" v-model.lazy="user.username" />观察响应{{user.username}}
			</div>
			
			<!-- 
				1. 计算属性如果调用多次,则有缓存机制,只计算一次
				2. 方法如果调用多次,则每次都要重新执行方法
				如果涉及
			 -->
			
			<div>
				用户输入:<input type="text" v-model="user.msg" /><br>
				数据展示:{{user.msg.split('')}}<br>
				数据展示:{{user.msg.split('').reverse()}}<br>
				数据展示:{{user.msg.split('').reverse().join('|')}}<br>
				数据展示:{{user.msg.split('').reverse().join('')}}<br>
				计算属性:{{reverse}}{{reverse}}{{reverse}}<br>
				{{reverseMe()}}{{reverseMe()}}{{reverseMe()}}
			</div>
			
		</div>
		<script src="../js/vue.js"></script>
		<script>
			const app = new Vue({
				el: "#app",
				data: {
					user: {
						username: '',
						info: '',
						city: ['上海','北京'],
						gender: '男',
						msg: ''
					},
					num: '',
					name: '',
					name1: ''
				},
				computed:{
					reverse(){
						console.log('计算属性执行');
						return this.user.msg.split('').reverse().join('')
					}
				},
				methods:{
					reverseMe(){
						console.log('方法执行');
						return this.user.msg.split('').reverse().join('')
					}
				}
			})
		</script>
	</body>

在这里插入图片描述

6 分支循环

6.1 分支

v-if 可以单独编辑使用 v-else/v-else-if 不可以单独使用必须和v-if联用

<body>
		<div id="app">
			分数:<input type="text" v-model="score" /><br>
			<div v-if="score>=90">优秀</div>
			<div v-else-if="score>=80">良好</div>
			<div v-else-if="score>=70">中等</div>
			<div v-else-if="score>=60">及格</div>
			<div v-else>你是最棒的</div>
			
			<!-- v-if 可以单独编辑使用 
				 v-else/v-else-if 不可以单独使用必须和v-if联用-->
			
		</div>
		<script src="../js/vue.js"></script>
		<script>
			const app = new Vue({
				el: "#app",
				data: {
					score: '0'
				}
			})
		</script>
	</body>
6.2 循环结构

问题:什么样的数据需要使用循环1.数组 2.对象
语法:v-for 遍历展现的是标签
遍历对象时 直接遍历对象,则展现value的值 如:“value in user”
(value,key,index) in user 分别代表对象的 属性值:属性名:下标位置 从0开始

<body>
		<div id="app">
			<!-- 问题:什么样的数据需要使用循环1.数组 2.对象
				 语法:v-for 遍历展现的是标签
			-->
			<h1>循环遍历数组</h1>
			<p v-for="item in hobby" v-text="item"></p>
			<div v-for="i in hobby"> {{i}}</div>
			<hr />
			<h1>遍历对象</h1>
			<!-- 直接遍历对象,则展现value的值 
			(value,key,index) in user 分别代表对象的
			-->
			<div v-for="(value,key,index) in user">
			<span v-text="key"></span>:<span v-text="value"></span>:<span v-text="index"></span>
			</div>
			<hr />
			<div v-for="(j,i,index) in user">
			<span v-text="i"></span>:<span v-text="j"></span>:<span v-text="index"></span>
			</div>
			<div v-for="user in userlist" >
				<span v-text="user.id"></span>:<span v-text="user.name"></span>
			</div>
		</div>
		<script src="../js/vue.js"></script>
		<script>
			const app = new Vue({
				el: "#app",
				data: {
					hobby: ['电脑','手机','平板'],
					user: {
						id: 100,
						name: 'tomcat猫'
					},
					userlist: [
						{id: 200,name: 'tomcat猫1'},
						{id: 300,name: 'tomcat猫2'},
						{id: 400,name: 'tomcat猫5'}
					]
				}
			})
		</script>
	</body>

7 生命周期函数

beforeCreate()、created()、beforeMount()、mounted()、beforeUpdate()、updated()、beforeDestroy()、destroyed()
一般不适用before函数

<body>
		
		<div id="app">
			<h3 v-text="msg"></h3>
			<button @click="destroy">销毁</button>
		</div>
		
		<!--引入js函数类库  -->
		<script src="../js/vue.js"></script>
		<script>
			const app = new Vue({
				el : "#app",
				data : {
					msg: "vue生命周期"
				},
				
				//在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
				beforeCreate(){
					console.log("beforeCreate")
				},
				//在实例创建完成后被立即调用
				created(){
					console.log("created")
				},
				//在挂载开始之前被调用:相关的 render 函数首次被调用。
				beforeMount(){
					console.log("beforeMount")
				},
				//实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。
				mounted(){
					console.log("mounted")	
				},
				//数据更新时调用,发生在虚拟 DOM 打补丁之前
				beforeUpdate(){
					console.log("beforeUpdate")
				},
				//由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
				updated(){
					console.log("updated")
				},
				//实例销毁之前调用。在这一步,实例仍然完全可用
				beforeDestroy(){
					console.log("beforeDestroy")	
				},
				//实例销毁后调用。
				destroyed(){
					console.log("destroyed")
				},
				methods:{
					destroy(){
						this.$destroy()
					}
				}
			})
		</script>
	</body>

8 数组用法

数组相关用法 队列/栈 push 压栈 pop 弹栈
push() 在最后追加元素
pop() 从最后删除元素
shift() 从开头删除元素 出现笔试题
unshift() 从开头追加元素
splice() 替换数据
sort() 排序按照字符编码编码顺序排列
reverse() 数组反转

<body>
		<div id="app">
			<!-- 数组相关用法  队列/栈 push 压栈 pop 弹栈
				push() 在最后追加元素
				pop()  从最后删除元素
				shift() 从开头删除元素   出现笔试题
				unshift() 从开头追加元素
				splice()  替换数据
				sort()    排序按照字符编码编码顺序排列
				reverse() 数组反转
			 -->
			 <!-- 对数据进行循环遍历-->
			 <span v-for="item in array">{{item}},</span><br>
			 
			 追加数据: <input type="text" v-model.number="num"/>
			 <button @click="push">push</button><br>
			 <button @click="pop">pop</button>
			 <button @click="shift">shift</button>
			 <button @click="splice1">替换第一个元素</button>
			 <button @click="splice2">将前3个数据改为num</button>
			 <button @click="splice3">将前3个数据改为num,num,num</button>
			 <button @click="splice4">删除第2个数据</button>
			 
			 
			 
			 
		</div>
		<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
		<script>
			const app = new Vue({
				el: '#app',
				data: {
					array: [1,2,3,4,5],
					num: ''
				},
				methods: {
					push(){
						this.array.push(this.num)
					},
					pop(){
						this.array.pop()
					},
					shift(){
						this.array.shift()
					},
					splice1(){
						/* arg1: 操作数据的起始位置 下标从0开始
						   arg2: 操作的数量
						   arg3: 替换后的值 可以有多个值
						   案例1:替换第一个元素
						 */
						this.array.splice(0,1,this.num)
					},
					splice2(){
						//将前3个数据改为num
						this.array.splice(0,3,this.num)
					},
					splice3(){
						//将前3个数据改为num,num,num
						this.array.splice(0,3,this.num,this.num,this.num)
					},
					splice4(){
						//删除第2个数据  隐藏功能
						this.array.splice(1,1)
					}
				}
			}) 
		</script>
	</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y519063548

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值