Vue——必知必会

29 篇文章 0 订阅

文章目录

项目准备

有两种方式:

1,单个html文件(推荐)
Vue——入门案例

2,Vue脚手架
Vue——使用脚手架

1,初识Vue

入门案例要牢记

<template>
	<div>
		{{msg}}
	</div>
</template>

<script>
	export default {
		data() {
			return {
				msg: "你好,世界"
			}
		}
	}
</script>

效果:
在这里插入图片描述

2,模版语法

插值表达式:
在标签体中显示变量的值,可以是任意JS表达式。
{{msg}}

指令:
在标签属性中,以v-开头,有各自的功能。

:href:指定href属性。

<template>
	<div>
		<a :href="url">百度</a>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				url:"http://www.baidu.com"
			}
		}
	}
</script>

模版:放一个东西占地方,之后再填充特定的值。

3,数据绑定

单向:DOM值变data,或者data变DOM值。
双向:DOM和data同步变化。
v-model:将变量与表单value双向绑定。

<template>
	<div>
		<input type="text" v-model="uname">
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: "1234"
			}
		}
	}
</script>

效果,改变data:

在这里插入图片描述
效果,改变DOM:

在这里插入图片描述
实现原理:JS杂技——手写双向绑定

4,el与data的第二种写法

el可以在创建实例之后绑定DOM。

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: function (h) { return h(App) }
}).$mount('#app')

data可以指定为一个函数,创建的时候自动调用。

<template>
	<div>
		<input type="text" v-model="uname">
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: "1234"
			}
		}
	}
</script>

5,MVVM模型

M:数据,变量,状态。
V:View视图,页面,DOM。
VM:Vue实例。

由Vue实例管理数据与DOM的关系。

比如:
由数据获得DOM值。
由视图的变化触发数据的变化。

在这里插入图片描述
数据代理:不直接操作数据,而是经过中间商赚差价,瓜子二手车。。。念顺口了。

6,事件处理

基本使用

@change:指定onchange事件

<template>
	<div>
		<input type="text" @change="sayInfo" v-model="uname">
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: "1234"
			}
		},
		methods: {
			sayInfo() {
				console.log(this.uname);
			}
		}
	}
</script>

效果:

在这里插入图片描述

参数传递

$event代表事件,其他随意。

<input type="text" @change="sayInfo($event,1,2,3,4)" />

sayInfo(event, a, b, c, d) {
	console.log(event.target.value + "," + a + "," + b + "," + c + "," + d);
}

效果:
输入123:
在这里插入图片描述

修饰符

@xxx后面可以跟一些东西,有特殊的效果。

.prevent	阻止默认
.stop	阻止冒泡
.once	只触发一次
.capture	捕获模式
.self	自身才能触发
.passive	立即执行默认行为

举例:
让链接不跳转(阻止默认行为)

<a href="https://www.baidu.com/" @click.prevent="">百度一下,也没有用</a>

此外,还有按键修饰符。

指定按键才会触发。

.enter
.delete
.esc
.space
.tab

举例:回车登陆

<template>
	<div>
		<input type="text" @keypress.enter="login" v-model="uname" />
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: ""
			}
		},
		methods: {
			login() {
				console.log("登陆了,用户名:" + this.uname);
			}
		}
	}
</script>

在这里插入图片描述

7,计算属性与监听

计算属性

可以由data中的数据生成新的数据。

源数据变动时,计算属性也会跟着变。

举例:值的首字母大写形式。

<template>
	<div>
		<input type="text" v-model="uname" /><br />
		uname:{{uname}}<br />
		bigger:{{bigger}}
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: ""
			}
		},
		computed: {
			bigger() {
				return this.uname.charAt(0).toUpperCase() + this.uname.slice(1)
			}
		}
	}
</script>

效果:

在这里插入图片描述

监听属性

可以在数据变动时执行方法。

举例:达到11位数时显示按钮。

immediate:是否在一开始就执行一次。
handler:监听触发的方法。

<template>
	<div>
		<input type="text" v-model="tel" />
		<button v-if="isActive">发送短信</button>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				tel: "",
				isActive: false
			}
		},
		watch: {
			tel: {
				immediate: false,
				handler(newV, oldV) {
					console.log(newV + "," + oldV);
					if (newV.length == 11) {
						this.isActive = true;
					} else {
						this.isActive = false;
					}
				}
			}
		}
	}
</script>

效果:

在这里插入图片描述
深度监视:监视a的时候,a的属性的属性变化也会触发。
开启:deep:true。

8,class与style

class

:class可以与class共存。

值为数组:多个类名

"['a','b','c']"

值为对象:键是类名,值是true,false。为false不会出现在DOM中。

"{a:true,b:true,c:false}"

举例:时大时小的文字。

<template>
	<div>
		<p :class="{big:isBig}" @click="isBig=!isBig">你好,世界</p>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				isBig: false
			}
		}
	}
</script>
<style scoped>
	.big {
		font-size: 32px;
	}
</style>

效果:

在这里插入图片描述

style

用的不多,因为行内样式用的不多。

值为对象,键为样式名小驼峰,值为值串。

对象数组,同理。

9,条件渲染

v-if:if块
v-else-if:else-if块
v-else:else块

v-show:显示隐藏,而不是移除DOM。

举例:为偶数则显示。

<template>
	<div>
		<span v-if="count%2==0">{{count}}</span><button @click="count++">加</button>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				count: 0
			}
		}
	}
</script>

效果:

在这里插入图片描述

10,列表渲染

v-for:for循环显示多个该标签。
:key:有助于效率,建议必加,唯一,ID。

举例:简单显示列表。

<template>
	<div>
		<ul>
			<li v-for="(item,index) in list" :key="index">
				{{item.uname}},{{item.age}}
			</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				list: [{
					uname: "A",
					age: 23
				}, {
					uname: "B",
					age: 12
				}, {
					uname: "C",
					age: 99
				}]
			}
		}
	}
</script>

效果:

在这里插入图片描述

列表过滤

由计算属性实现。

<template>
	<div>
		<input type="text" v-model="search" />
		<ul>
			<li v-for="(item,index) in list2" :key="index">
				{{item.uname}},{{item.age}}
			</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				list: [{
					uname: "A",
					age: 23
				}, {
					uname: "B",
					age: 12
				}, {
					uname: "C",
					age: 99
				}],
				search: ""
			}
		},
		computed: {
			list2() {
				return this.list.filter(i => i.uname.indexOf(this.search) != -1);
			}
		}
	}
</script>

效果:

在这里插入图片描述

列表排序

同理。

computed: {
	list2() {
		return this.list.sort((a, b) => a.age - b.age);
	},
	list3() {
		return this.list.sort((a, b) => b.age - a.age);
	}
}

在这里插入图片描述

更新条件

1,对象直接赋值新对象,将会无法发现该更新。

原理:原对象有更新功能,新对象没有。

2,后添加的数据,没有功能。

因为它也是你写的。

3,解决方法

this.$set(对象,属性名,值)

4,数组特定方法才能更新
push,pop,shift,unshift,splice,sort,reverse
在这里插入图片描述

11,过滤器

为数据提供一些处理,和计算属性差不多。

举例:首字母大写。

<template>
	<div>
		<input type="text" v-model="uname" /><br />
		uname:{{uname}}<br />
		bigger:{{bigger}}<br />
		bigger2:{{uname|bigger2}}
	</div>
</template>

<script>
	export default {
		data() {
			return {
				uname: ""
			}
		},
		computed: {
			bigger() {
				return this.uname.charAt(0).toUpperCase() + this.uname.slice(1)
			}
		},
		filters: {
			bigger2(v) {
				return v.charAt(0).toUpperCase() + v.slice(1)
			}
		}
	}
</script>

效果:

在这里插入图片描述

12,其他常用指令

v-text:innerText
v-html:innerHtml

v-clock:在渲染该标签之前,隐藏该标签。不会看到{{msg}}这种。

v-once:只会渲染一次,之后就不管它了,常量。
v-pre:直接就不管它了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值