引用
demo1
创建应用app和挂载
//创建
const app=Vue.createApp({})
//挂载到DOM
const vm = app.mount("#app")
或者
Vue.createApp({
...
}).mount('#app')
生命周期函数
生命周期函数,生命周期函数你可以这样理解,就是在** 在某一时刻会自动执行的函数 **,这句话你可以注意两个关键词:
(1)某一时刻
(2)自动执行
Vue3中有八个生命周期函数,
beforeCreate( ) :在实例生成之前会自动执行的函数
created( ) : 在实例生成之后会自动执行的函数
beforeMount( ) : 在模板渲染完成之前执行的函数
mounted( ) : 在模板渲染完成之后执行的函数
beforeUpdate :当data中的数据变化时, 会立即自动执行的函数
updated:当data中的数据发生变化,页面重新渲染完后,会自动执行的函数
beforeUnmount( ) :当Vue应用失效时,会自动执行的函数
unmounted() : 当Vue应用失效时,且DOM完全销毁之后,会自动执行
这样就有四个关键节点了:创建、渲染、更新、销毁。最主要的理解是他们是自动执行的函数
demo7
插值表达式和v-bind绑定数据
插值表达式就是经常看到的{{xxxx}}这样的东西
插值表达式输出html标签:v-html
return {
message: 'jspang.com'
}
...
template: `
`
[ 插值表达式只作一次渲染-v-once]
只有在第一次渲染去data中的值,而以后不再跟随data变化,这时候就要用到v-once指令。
插值表达式中是可以使用JS表达式的,最常用的表达式是三元运算符
{{count>2?'大':'小'}}
也可以这样:
{{'jspang'+'.com'}}
{{1+2}}
v-bind使用
现在我们给h2标签加入一个title属性,属性的值也想使用message
`
这时候浏览器中鼠标放上时显示的确实message这个单词,而并没有出现我们想要的结果。这时候就可以使用v-bind标签了。写成下面的样式就可以了
v-bind:title="message"
v-bind的简写方式:
{{message}}
{{message}}
v-on基本用法
methods:{
hanldClick(){
alert('欢迎光临红浪漫')
}
},
template:`
{{message}}
`
v-on还有一个简写方法,就是可以不屑v-on:用@代替,
template:`
{{message}}
`
模板动态参数
这里v-bind:title中的title是来自data中的,就可以这样写。
const app=Vue.createApp({
data(){
return{
message:'jspang.com' ,
name:'title'
}
},
//.........
template:`
{{message}}
`
})
可以看到我们在data中,定义了一个name的变量,值是一个字符串,然后在绑定属性时我们使用了[]方括号加上data中变量名的形式。这时候绑定的属性就变的灵活了,这种形式就是模板动态参数,也称为动态属性。
可以在浏览器中使用检查的方式,查看此时绑定属性的名称,如果进行修改,比如改成title1,浏览器中也会跟随改变,形成动态效果,这就是动态属性了
return{
message:'jspang.com' ,
name:'title',
event:'click'
}
template:`
{{message}}
`
这时候就实现了动态绑定方法,可以打开浏览器,看一下效果。当点击
标签时,也会弹出对应的alert效果。当然你还可以帮click改成其他相应事件,比如改成event:'mouseenter',这样,当鼠标滑入时就可以相应弹出效果了。
阻止默认事件
最常见的默认事件就是表单的默认提交事件,比如我们这里写一个表单,然后写一个属性为submit的按钮,当点击按钮时,表单就会默认提交到对应的网址。
这时候在浏览器中预览,点击“默认提交”按钮,就会立即跳转到百度上去,这就是默认响应事件。但是在开发中我们经常需要阻止这种默认响应事件。比如写出下面的代码。
methods:{
hanldeClick(){
alert('欢迎光临红浪漫')
},
hanldeButton(e){
e.preventDefault() //阻止默认事件
}
},
//...
template:`
//....
`
或者 使用prevent修饰符
`
methods中的写法
hanldeButton(){
alert('jspang.com')
}
这样就可以阻止默认事件,直接响应对应事件的内容了。prevent就是阻止默认事件的修饰符。修饰符可以见简化一些代码的编写,也是比较常用的一个操作。
v-if判断
{{message}}
template: `
{{message}}
{{message}}
`
计算属性computed
计算属性的特性是:当计算属性依赖的内容发生变更时,才会重新执行计算
data(){
return{
message:'jspang.com' ,
price:10,
count:2
}
},
template:` {{price * count}}
`
写一个getTotal的方法。
methods:{
getTotal(){
return this.price * (this.count++);
}
},
template:` {{getTotal()}}
`
methods无法满足计算需求
比如:
methods:{
getTotal(){
return Date.now()
}
},
这时候打开浏览器的控制台console,然后在里边通过手都的方式修改message的值vm.message='1111'。这时候问题产生了,你会发现getTotal( )方法被重新执行了。这就是这个问题的所在,这个问题其实可以用今天的主角coumputed计算属性来解决。
编写计算属性
computed:{
total(){
return Date.now()
}
},
template:`
{{message}}
{{total}}
`
这时候到浏览器中,用手动的方法,修改message的值,total的值就不会进行改变了。
vm.message='1111'
通过这个例子,你会对普通方法和计算属性的区别有所了解。这时候我们作一下总结:
(1)方法methods:只要页面重新渲染,就会重新执行方法
(2)计算属性computed: 当计算属性依赖的内容发生变更时,才会重新执行计算
完整例子
Demo12-Vue中的计算属性
watch侦听器
watch侦听器的作用就是侦听一个data中的值的变化,变化后可以写一个方法,让其进行一些操作(业务逻辑的编写)。
data(){
return{
...
count:2
}
}
...
watch:{
count(){ //监听data中的count值变化
console.log('count changed')
}
},
侦听器中的方法还可以接收两个参数,一个是现在的值(current),一个是变化之前的值(prev)。我们分别接收这两个值,并打印在控制台,看一下效果。
watch:{
count(current,prev){
console.log('watch changed')
console.log('现在的值:',current)
console.log('变化前的值:',prev)
}
}
监听器watch和计算属性computed的区别
计算属性computed必须要返回一个值,而且在页面渲染的同时就会执行里边的业务逻辑,也就是会先执行一遍你写的业务逻辑,而watch只有发生变化时才会执行,也就是说值没有变化,它是不执行里边业务逻辑的。
method,watch,computed三者优先级
现在总结一下method、watch和computed三者如果都能实现相同的功能,它们之间的取舍和使用优先级。
(1)computed 和 method都能实现的功能,建议使用computed,因为有缓存,不用渲染页面就刷新。
(2)computed 和 watch 都能实现的功能,建议使用 computed,因为更加简洁。
模板样式绑定
data(){
return {
classString:'red',
}
},
template:`
JSPang.com
//绑定同样使用v-bind,你也可以使用简写:
`
....
//定义三个样式
对象的绑定方式
data(){
return {
classString:'red',
classObject:{red:true,background:true}
}
},
...
template:`
JSPang.com
`
这时候再到浏览器中查看效果,就会有两个样式被绑定了red和background。如果你这首把red改为false,那效果就是只有背景颜色,没有字体颜色了。
数组的绑定方式
data(){
return {
classString:'red',
classObject:{red:true,background:true},
classArray:['green','background'],
}
},
...
template:`
JSPang.com
`
行内样式绑定
const app=Vue.createApp({
data(){
return {
styleString:'color:orange;',
styleObject:{
color:'red',
background:'yellow'
}
}
},
template:`
JSPang.com
`
})
const vm=app.mount("#app")
v-if和v-show区别
data(){
return{
show:true,
}
},
template:`
JSPang.com
`
这时候打开浏览器进行预览,是可以看到JSPang.com这个h2的DOM元素的。如果把数据项show改成false就看不到了。
v-if更加灵活,可以增加多个判断,比如v-else-iif和else,而v-show不具备这样的灵活性。
v-show控制DOM元素显示,其实控制的是css样式,也就是display:noe。现在你可以把data的值修改为false,然后刷新浏览器,打开浏览器调试器的Elements选项卡,就可以清楚的看到,这时候
标签上的style样式就是display:none。
v-for循环
v-for循环数组方法
const app=Vue.createApp({
data(){
return{
listArray:['谢大脚','刘英','晓红']
}
},
methods:{
},
template:`
- [{{index}}]{{item}}
`
})
const vm=app.mount("#app")
const app=Vue.createApp({
data(){
return{
listArray:['谢大脚','刘英','晓红']
}
},
methods:{
},
template:`
- [{{index}}]{{item}}
`
})
const vm=app.mount("#app")
关于循环是key值
为了提高循环时性能,在数组其中一项变化后,整个数组不进行全部重新渲染,Vue提供了绑定key值的使用方法,目的就是增加渲染性能,避免重复渲染。
加唯一性key值,增加后vue就会辨认出哪些内容被渲染后并没有变化,而只渲染新变化的内容。
:key="index+item"
官方不建议使用索引index为key值,但此时又为了保持唯一性,所以这里使用了index+item进行绑定key值
v-for 循环对象
data(){
return{
//......
listObject:{
GirlOne:'谢大脚',
GirlTwo:'刘英',
GirlThree:'晓红'
}
}
},
在模板中进行循环的时候,为了更好的语义化,我们把参数改为了value,key和index。然后进行循环。
-
[{{index}}]{{value}}-{{key}}
v-for循环数字
{{count}}|
v-for循环中使用判断v-if
Vue给我们提供了模版标签,也就是一个空的占位符,目的就是解决模板中为完成业务逻辑,而使用的无用html标签的现象。
template:`
- {{index}}[{{key}}]:{{value}}
`
按钮绑定事件
methods:{
addCountClick(){
this.count++;
},
},
...
template:`
目前已点佳丽数量{{count}}.
`
})
还可以用直接表达式
在编写响应事件事,是可以接受一个event参数的,这个参数就是关于响应事件的一些内容。我们直接打印出event,你会发现内容比较多,其实这些参数还是值得一看的,在工作中有时真的会用到
methods:{
addCountClick(event){
this.count++;
console.log(event)
},
},
多参数
methods:{
addCountClick(num){
this.count+=num
},
},
template:`
//.....
`
})
有参数的情况下使用event
方法是参数增加$event。
methods:{
addCountClick(num,event){
this.count+=num;
console.log(event.target)
},
},
template:`
目前已点佳丽数量{{count}}.
`
})
一个按钮调佣2个方法
methods:{
//...
handleBtnClick1(){
alert(1)
},
handleBtnClick2(){
alert(2)
},
},
...
事件修饰符
Demo19
(1)stop修饰符
在Vue中要停止冒泡是非常简单的,只要加加一个事件修饰符stop就可以了。
(2)self修饰符
除了使用.stop修饰符,还有一种修饰符self,意思是只有点击自己的时候才会被执行。 只不过加的位置要在家外层DOM元素的事件上。
template:`
目前已点佳丽数量{{count}}.
`
这时候你会发现点击那里,都没办法触发hanldeBtnClick1方法了,这是因为目前最外层div下都是独立的DOM元素,就是都有成对标签出现,都不属于最外自己,都是他们的子元素。
可以编写一段专属最外层DIV的文字。
template:`
我是最外层的DIV文字
目前已点佳丽数量{{count}}.
`
这样当点击我是最外层的DIV文字时,就会触犯handleBtnClick1方法了。
(3)prevent修饰符:
阻止默然行为的修饰符,这个以前讲过,例如阻止form表单的默认提交行为。
(4)capture修饰符
改成捕获模式,默认的模式都是冒泡模式,也就是从下到上,但是你用capture后,是从上到下的。
methods:{
addCountClick(){
this.count++
alert(0) //修改了此处
},
handleBtnClick1(){
alert(1)
},
},
template:`
//修改了此处
我是最外层的DIV文字
目前已点佳丽数量{{count}}.
`
(5)once修饰符
事件只执行一次(视频中作演示)。
template:`
我是最外层的DIV文字
目前已点佳丽数量{{count}}.
`
(6)passive修饰符:解决滚动时性能的修饰符
按键鼠标修饰符
Demo21
然后在methods部分加入一个方法handleKeyDwon( ),具体内容只是在控制台打印出来keydown。
methods:{
handleKeyDown(){
console.log('keydow....')
}
},
然后在模板中的中绑定键盘(任何按键)按下时响应keydown。
template:`
`
单个按键
就是指定键盘上某个特殊的按键时才会响应事件方法
如果现在的需求是,上面的代码只有在按下回车时,才在控制台进行打印,这时候就需要按键修饰符了。我们学的第一个按键修饰符enter
template:`
`
})
类似这样只响应单个按键的修饰符有很多:
enter 、tab、delete、esc、up 、down、left、right
鼠标修饰符
除了按键修饰符,还有鼠标修饰符,就是按下鼠标上的某个键时,才会响应。
最常用的就是: left、right、middle
现在的需求是在页面上作一行文字JSPang.com,然后只有用鼠标右键点击时,才会弹出alert( )。
先在methods里编写一个handleClick方法。
methods:{
//...
handleClick(){
alert('click')
}
},
然后在模板中使用鼠标修饰符,确定只有点击鼠标右键时才会响应。
JSPang.com
表单数据双向绑定
data中的变量改变时,绑定的数据会跟随变化,此为一项修改;当通过页面修改数据,data中的变量也随之改变,这就是另一项修改。两个彼此依存改变,就为双向数据绑定。
目前这种就完成了的双向数据绑定。
textarea数据双向绑定
以前我们写HTML的时候,写textarea标签都是成对出现的,比如这样,如果想在Vue中实现textarea的双向数据绑定,这时候只要写单标签就可以了,剩下的事情Vue底层就帮你完成了。
template:`
{{name}}
`
checkbox数据双向绑定
checkbox是一个勾选框(复选框),如果只有一个选项时,我们可以给
现在data中新声明一个变量checked.
data(){
return{
name:'',
checked:false
}
},
...
{{checked}}
checkbox还有一个功能就是复选,可以选择多个。
比如还是象牙山三大美女的例子,现在勾选谁,谁就可以显示在页面上。
这时候要先定义一个变量,这个变量是一个空数组。
data(){
return{
name:'',
checked:false,
girls:[]
}
},
...
{{girls}}
大脚
刘英
晓红
radio数据绑定
会了checkbox的双向数据绑定,radio单选按钮就简单了。但是需要注意的是,既然是单选,这时候data中的变量就不能是一个数字了,一般是一个字符串。比如我们这里新定义了一个girl的变量。
data(){
return{
name:'',
checked:false,
girls:[],
girl:'',
}
},
...
{{girl}}
大脚
刘英
晓红
绑定修饰符
Demo23
在浏览器中预览时,当选择复选框时,会显示true,没选中显示false。
现在的需求是,我选中的时候显示JSPang.com,没选中的时候显示技术胖。这时候要如何处理那?
Vue给我们提供了这样两个属性true-value和false-value。我们在Data中新声明一个变量name,值为空字符串。
data() {
return {
checked: true,
name: '',
}
},
...
template: `
{{name}}
`
v-model 数据修饰符--lazy修饰符
v-model也有很多实用的修饰符,现在就学习一下。第一个修饰符lazy,这个也叫做懒更新修饰符。
我们作一个input的绑定效果,现在data中声明一个message变量,值为空。然后在模板中写一个并和message进行双向数据绑定。
data() {
return {
checked: true,
name: '',
message:'',
}
},
...
{{message}}
这时候当你在文本框中输入任何内容的时候,插值表达式会跟着改变。如果你不想马上显示,就可以用lazy修饰符,这样就可以实现当输入完成后,失去焦点再进行改变。
number修饰符
{{typeof message}}
trim修饰
trim修饰符大家一定不陌生,它是用来消除input框输入内容前后的空格的。现在我们再字符串上输入空格,其实它会在DOM元素上进行增加空格的,这个可以在控制台清楚的看出(详细请看视频操作)。 加入trim修饰符后,Vue就会自动给我们去除前后的空格。
{{message1}}