Vue学习笔记 - 常用的指令
Posted WHOVENLY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue学习笔记 - 常用的指令相关的知识,希望对你有一定的参考价值。
本篇文章用于介绍Vue中常用的指令
一、指令定义
1.指令里除了放变量,还可以放表达式
2.指令都是v-开头的
二、常用指令
1.v-cloak
1.定义:用于解决小型简单的vue项目的闪烁问题,大型、工程化的项目中(webpack、vue-router)只有一个空的 div 元素,元素中的内容是通过路由挂载来实现的,这时我们就不需要用到 v-cloak 指令咯。
2.实现原理:
1)当dom渲染完,即页面出现后,vue才介入
2)在vue解析之前,div中有一个属性v-cloak,在vue解析之后,div中没有一个属性v-cloak
3)做法:控制元素显隐,使用该指令后页面内容会在vue介入前先隐藏,在vue工作后才显示页面。
3.使用:将v-bloak写在el绑定的标签上,相当于一个属性,并设置v-bloak属性的样式为display:none隐藏。
4.实现过程:当vue还未进入时,有v-bloak属性,并为v-bloak属性设置隐藏样式,而当vue介入后,该属性不存在了,则设置的隐藏样式也不存在了,此时页面展示
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
[v-cloak]{
display:none;
}
</style>
</head>
<body>
<div id='app' v-cloak></div>
</body>
2.v-bind:
1.定义:用于属性的动态绑定
2.写法:v-bind:
语法糖::
3.使用:
1)普通写法::属性名=‘属性值’
<body>
<div id="app">
<div v-bind:id='myId'>我是盒子一号</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
myId:'redDiv',
},
})
</script>
2)对象写法:v-bind:属性名=’{类名1:booolean,类名2:boolean}’
<body>
<div id="app">
<div :class='{red:isRed,pink:isPink}'>我是粉盒子</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
isRed:false,
isPink:true
},
})
</script>
3)对象写法升级版:v-bing:属性名=‘方法名()’
<body>
<div id="app">
<div :class='getClass()'>我是蓝盒子</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
isRed:false,
isPink:true,
isBlue:true
},
methods:{
getClass(){
return {red:this.isRed,blue:this.idBule}
}
}
})
</script>
4)数组的写法:v-bind:属性名=’[类名1.类名2]’
<body>
<div id="app">
<div :class='["orange"]'>我是橙盒子</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
},
})
</script>
5)数组写法的升级版:v-bind:属性名=‘方法名()’
<body>
<div id="app">
<div :class='getClass()'>我是紫盒子</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
isRed:false,
isPink:true,
isBlue:true
},
methods:{
getClass(){
return ["pruple"]
}
}
})
</script>
6)使用v-bind绑定style属性示例
<body>
<div id="app">
<!-- 对象写法 -->
<div :style="{color:'pink',fontSize:'15px'}">我是粉色加大版</div>
<div :style="{color:getColor,fontSize:getFontSize}">我是蓝色加大版</div>
<div :style='getStyle()'>我是蓝色迷你版</div>
<!-- 数组写法 -->
<div :style='[color,fontSize]'>我是紫色迷你版</div>
<div :style='getStyleArray()'>我是紫色迷你版</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
getColor:'skyblue',
getFontSize:"16px",
color:{color:'purple'},
fontSize:{fontSize:'12PX'}
},
methods:{
getStyle(){
return {color:this.getColor,fontSize:'13px'}
},
getStyleArray(){
return [this.color,this.fontSize]
}
}
})
</script>
3.v-on
1.定义:用于绑定事件
2.写法:v-on:触发事件的类型名=事件名
语法糖:@
3.关于参数:如果该方法不需要额外参数,那么方法后的()可以不添加。
1)但是注意如果函数需要参数,但是没有传入,那么会默认将原生事件event参数传递进去
2)需要同时传入某个参数,如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件。
<body>
<div id="app">
<button @click='addNumber'>点击我+1</button>
<button @click='addNumber10(10,$event)'>点击我+10</button>
<div>{{number}}</div>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
number: 1
},
methods:{
addNumber(event) {
console.log(event)
this.number++
},
addNumber10(number, event) {
this.number = this.number + number
}
}
})
</script>
4.方法使用的地方:on和methods里的其他方法,并且在其他方法中使用时要用this,this指代的是当前这个vue的实例对象vm
5.跑马灯的例子:
<body>
<div id="app">
<div>{{message}}</div>
<button @click='start'>开始</button>
<button @click='end'>结束</button>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
message: '浪哩个浪',
interval: null
},
methods:{
start() {
if (this.interval != null) return
this.interval = setInterval(() => {
//substring(start,end)包前不包后
// 获取下标为0的字符
let start = this.message.substring(0, 1)
// 获取下标为1直到最后一个字符的字符串
let end = this.message.substring(1)
this.message = end + start
}, 400)
},
end() {
// 清除定时器
clearInterval(this.interval)
this.interval = null
}
}
})
</script>
6.事件修饰符 – 可多个串联使用
1).stop:从根源阻止冒泡,使事件原地直接爆炸。用法:绑定事件后.stop。
2).prevent:阻止默认事件。常用于
3).once:使当前事件只触发一次,通常结合使用
4).self:只当事件在该元素本身,子孙元素触发时,他不会触发回调。逐个
5).capture:添加事件侦听器时使用时间捕获形式
6)键盘事件的.键修饰符:可以使用键别名或者键代码。
<!-- 监听使用键代码监听回车键弹起 -->
<input @keyup.13='keyClick'>
<!-- 监听使用键别名监听回车键弹起 -->
<input @keyup.enter='keyClick'>
<div @click.self='big' style="height: 200px;width: 200px;background-color: orange;">
<div @click='small' style="height: 100px; width: 100px;background-color: orchid;">
<!-- 事件修饰符可以串联使用-->
<button @click.stop.once='btn'>点击我</button>
</div>
<a href="https://www.cnblogs.com/watson945/p/5067110.html" @click.prevent='jump'>原生跳转事件 以失效</a>
<a href="https://www.cnblogs.com/watson945/p/5067110.html" @click='jump'>原生跳转事件未失效 </a>
</div>
4.v-if和v-show
1.共同点:
(1)都用于控制元素的显示隐藏;
(2)可以跟表达式,但是结果只能是boolean,为true:显示;为false:隐藏
2.区别:
(1)手段:v-if是动态的向DOM树内添加或者删除元素,即若元素被删除后文档流里看不到;v-show是通过设置DOM元素的display:none样式属性控制显隐
(2)性能消耗:v-if有更高的切换和,v-show有更高的初始渲染的消耗,但总的v-if消耗高
(3)使用场景:v-if:适合运营条件不大可能改变的元素上,v-show适合频繁切换
(4)方式:v-if的方式多(v-if,v-else-if,v-else),而v-show只有一种
(5)判断次数:v-if只判断一次(满足条件后不往下判断了),而v-show要判断多次(每个都要判断)
3.例子
<!-- 最少可能只执行一次,即当state为1时 -->
<div v-if='state == 1'>成功</div>
<div v-else-if='state == 0'>失败</div>
<div v-else>进行中</div>
<!-- 一定要执行3次 -->
<div v-show='state == 1'>成功</div>
<div v-show='state == 0'>失败</div>
<div v-show='state == 2'>进行中</div>
<body>
<div id="app">
<div v-if='type'>
<label>
手机号:
</label>
<!-- 加上不同的key,告诉vue不再复用之前的那个input,就不会出现把input中的值带出的问题 -->
<input type="text" placeholder="请输入手机号" key='1'>
</div>
<div v-else>
<label>
邮箱号:
</label>
<input type="text" placeholder="请输入邮箱号" key='2'>
</div>
<button @click='changeType'>切换类型</button>
</div>
</body>
<script src="../lib/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
type:false
},
methods:{
changeType(){
this.type = !this.type
}
}
})
</script>
4.注意点:
1)如果v-show作用的元素,css文件中display:none;通过v-show进行设置不能显示该元素;
原因:因为v-show控制显隐是通过js代码去修改元素的element style,如果value为false,设置diaplay:none;如果value为 true,设置display:”;于是value为true时只能将element style中的diaplay效果清除,并不能覆盖css中的diaplay效果;
解决办法:使用v-show的话,在vue解析之前隐藏DOM的话,尽量在style属性里面设置display的值,不要在css文件中】
【拓:visibility:hidden:占位符还在;diaply:none:占位符不在】
以上是关于Vue学习笔记 - 常用的指令的主要内容,如果未能解决你的问题,请参考以下文章