指令就是标签的自定义属性(一个指令就是标签的一个自定义属性);
@
;:
;#
;1.作用
2.语法
{{变量名(data中的属性名)}}
3.特点
举例说明
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="app">
<p>{{person.name}}p>
<p>{{person.age}}p>
<p>{{person.age>18?'欢迎进入网吧':'未成年人进制入内'}}p>
div>
<script>
const mv=new Vue({
el:'#app',
// 模型
data:{
person:{
name:'chaochao',
age:'20',
}
}
})
script>
body>
html>
v-html=变量名(data中的属性名)
局部
语法的位置,标签间原有的文本不会覆盖,不会解析html+css;会将html标签按照普通文本进行显示;1.作用:给元素绑定事件
2.语法:
v-on:事件类型=‘methods中的方法名’
@事件类型=‘methods中的方法名’
4.注:事件方法定义在vue实例的mehods对象中;
5.举例说明
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<style>
.box{
width: 100px;
height: 100px;
border:1px solid red;
}
style>
head>
<body>
<div id="app">
<button @click='btnClick'>点我呀button>
<div class="box" v-on:mouseenter='boxEnter' @mouseleave='boxLeave'>div>
div>
<script>
const mv=new Vue({
el:'#app',
// 模型
data:{
person:{
name:'chaochao',
age:'20',
}
},
methods: {
btnClick(){
alert('点我一次288')
},
boxEnter(){
console.log('移入');
},
boxLeave(){
console.log('移出');
}
},
})
script>
body>
html>
v-bind:html原生属性名=‘值’
:html原生属性名=‘值’
对象
class原生一般直接使用字符串添加在class属性中;
"box1 box2">111
若是想去掉可以通过removeAttribute方法移除;
在vue中,我们可以有以下几种选择
[1]给class添加一个对象
;
(1)在data中定义几个属性控制多个类的显示与隐藏
<div :class="{ box1, box2}">111div>
data () {
return {
box1: true,
box2: false
}
},
(2)在data中定义一个对象通过data中的数据动态控制元素的样式,这样比(1)更加直观
<div :class="divClass">111div>
data() {
return{
divClass: {
box1: true,
box2: false
}
}
},
[2]也可给class添加一个数组
<div :class="[num==1?'box2':'box1','box3']">111div>
[3]给class添加一个三元表达式
<div :class="num==1?'box2':'box1'">111div>
原生的行内样式书写与内嵌式书写方式相同
<div style="backgroundColor:aqua;color:red">111div>
而在vue中我们有以下几种选择
[1]可以传入一个对象
<div :style="boxStyle">111div>
data () {
return {
boxStyle: {
backgroundColor: 'aqua',
color: 'red'
}
}
[2]可以传入一个数组
,数组的每个元素是一个样式对象
<div :style="[boxStyle1,boxStyle2]">111div>
data () {
return {
boxStyle1: {
backgroundColor: 'aqua'
},
boxStyle2: {
color: 'red'
}
}
},
1.作用:渲染列表(渲染数组)
2.语法
[1]遍历数组
<li v-for='(item index) in arr'>li>
<li v-for='item of arr'>li>
[2]遍历对象
<li v-for='(val,key,index) in obj'>li>
[3]根据一个字符串进行遍历
<li v-for='index of str'>li>
v-model='data中的值'
作用
语法
v-if=‘布尔值’
v-else-if=‘布尔值’
v-else
- 注:必须以v-if开头,v-else-if,v-else可有可无;
两者都是控制元素的显示或隐藏,值为boolean类型;
也就是说若boolean值为false,v-if是直接将元素不加载在dom树上, v-show是将元素加载到dom树上,但是将其隐藏;
底层中 v-if是通过display实现的,v-show是通过visiblity实现的!
v-if有更高的切换消耗,v-show有更高的初始渲染消耗
使用场景
因为v-for比v-if的优先极高,当v-for与v-if在同一个标签上时,会先循环然后再进行if判断,会造成性能浪费;
作用:
设置元素vue渲染之前的样式(一般是隐藏)
语法
v-cloak
实质
属性选择器
注意点
[1]一定要写css样式
[2]vue会在数据完成渲染之后自动移除这个样式
eg:在渲染数据的时候,有时候网速慢,就会看到渲染成功之前的样式;即插件语法{{msg}}之类的
没加时数据没有渲染成功的显示:{{msg}}
加上此指令没有渲染成功的显示:空白
[v-clock]{
display:none;
}
作用
让这个元素只是在初始的时候渲染一次;(优化性能)
即vue只是加载这个元素将数据显示在页面上;
之后data数据发生/样式发生变化不会重新渲染;
语法
v-once
应用场景
点外卖左侧导航栏(页面左侧数据没有变化)
作用
让vue不渲染这个元素
语法
v-pre
应用场景
博客类的网站
eg:vue官网(为了让学习的人看到vue语法)