版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ght886/article/details/87529809
1、声明式渲染
1.1、文本插值,用两个花括号:{{内容}}
html如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app"> //挂载元el,指定的节点,用id表示
<p v-clock>{{ message }}</p> //vue实例对象中data对象中某个属性名
</div>
<!-- built files will be auto injected -->
<script>
var vm = new Vue({
el: '#app', //挂载到DOM节点上,节点的id=app
data: { //给data对象定义属性message,与html中某个文本对象变量名一致
message: 'Hello Vue!'
},
methods:{ //这个methods属性定义了vue实例所有可用的方法
}
})
</script>
</body>
</html>
1.2、v-text,解析文本,能读取文本,但不能解析html标签(就是如果变量值是html的形式给出,那么读出的值也包含html标签)
1.2.1 v-text 属性值为字符串文本
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-text="msg"></div>
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
msg:" hello"
},
methods: {
say() {
alert(hello);
}
}
})
</script>
</body>
</html>
1.2.2 v-text,属性值为字符串html语句
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-text="msg"></div>
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
msg:"<p1>hello,Vue</p1>"
},
methods: {
say() {
alert(hello,vue);
}
}
})
</script>
</body>
</html>
1.3、v-html,能解析html语句,也能读取文本值
v-text和v-html两者都能读取文本,但是v-html能解析字符串html语句
1.3.1 v-html,属性值为字符串html语句
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-html="msg"></div>
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
msg:"<p1>hello,Vue</p1>"
},
methods: {
say() {
alert(hello,Vue);
}
}
})
</script>
</body>
</html>
1.3.2 v-html,属性值为字符串文本语句
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-html="msg"></div>
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
msg:"hello,Vue"
},
methods: {
say() {
alert(hello,vue);
}
}
})
</script>
</body>
</html>
2、v-bind(可以简化为:),动态绑定数据,及时对页面的数据进行变更,如V-bind:标签属性=“变量名”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app-2">
<span v-bind:title="message"> //或者简写:<span :title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
<script>
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于 ' + new Date().toLocaleString()
}
})
</script>
</body>
</html>
2.1、v-bind:class,三种绑定方法—
2.1.1、对象型 “{red:isred}”
2.2.2、三目型"isred?‘red’:‘blue’"
2.3.3、数组型"[{red:‘isred’},{blue:‘isblue’}]"
2.1.1、对象型:
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<style>
.red {
background: red;
}
.blue {
width: 100px;
height: 100px;
background: blue;
}
</style>
</head>
<body>
<div id="box">
<div style="width: 100px;height: 100px;" v-bind:class='{red:isred}'></div>
<!--<div style="width: 100px;height: 100px;" v-bind:class='isred?"red":"blue"'></div>--> <!--三元运算符方式-->
<!--<div style="width: 100px;height: 100px;" v-bind:class='[{red:"isred"}]'></div>-->
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
isred:true
}
})
</script>
</body>
2.2.2、三目型:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<style>
.red {
background: red;
}
.blue {
width: 100px;
height: 100px;
background: blue;
}
</style>
</head>
<body>
<div id="box">
<!--<div style="width: 100px;height: 100px;" v-bind:class='{red:isred}'></div>-->
<div style="width: 100px;height: 100px;" v-bind:class='isred?"red":"blue"'></div> <!--三元运算符方式-->
<!--<div style="width: 100px;height: 100px;" v-bind:class='[{red:"isred"}]'></div>-->
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
isred:false
}
})
</script>
</body>
</html>
2.3.3、数组型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<style>
.red { background: red;}
.blue { width: 100px; height: 100px; background: blue;}
</style>
</head>
<body>
<div id="box">
<!--<div style="width: 100px;height: 100px;" v-bind:class='{red:isred}'></div>-->
<!--<div style="width: 100px;height: 100px;" v-bind:class='isred?"red":"blue"'></div>--> <!--三元运算符方式-->
<div style="width: 100px;height: 100px;" v-bind:class='[{red:"isred"}]'></div>
</div>
<script type="text/javascript">
new Vue({
el: "#box",
data:{
isred:true
}
})
</script>
</body>
</html>
2.2、v-bind:style,绑定内联样式
2.2.1、内联样式,对象型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id='box'>
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">{{message}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data: {
activeColor: 'red',
fontSize: 30,
message:'hello',
}
})
</script>
</body>
</html>
显示结果:
2.2.2、直接绑定到一个对象上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id='box'>
<div v-bind:style="styleObj">{{message}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data: {
styleObj:{
color:'red',
fontSize:'30px'
},
message:'hello',
}
})
</script>
</body>
</html>
2.2.3、数组语法,将多个样式对象应用到同一个元素上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id='box'>
<div v-bind:style="[style1,style2]">{{message}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data: {
style1:{
color:'red',
fontSize:'30px'
},
style2:{
color:'black'
},
message:'hello',
}
})
</script>
</body>
</html>
3、条件 v-if ,显示与隐藏(DOM元素的删除与添加),v-if = “变量名”,在data中用true或false来控制显示和隐藏
html如下:
<div id="app-3">
<p v-if="seen">现在你能看到内容了</p>
</div>
var app3 = new Vue({
el: '#app-3',
data: {
seen: true //用true、false来控制能否看见内容
}
})
4、条件 v-else-if 必须和v-if连用 ,格式 v-else-if=“变量名”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>
</div>
5、条件 v-else 必须和v-if连用,不能单独使用,否则报错:模板编译错误,格式 v-else=""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div v-if="Math.random() > 0.5">
Sorry
</div>
<div v-else>
Not sorry
</div>
</div>
<script>
new Vue({
el: '#app'
})
</script>
</body>
</html>
6、v-show,显示与隐藏,传递的值为布尔值,默认为false,格式v-show=“变量名”,只是设置display属性,元素还存在DOM中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1 v-show="ok">Hello!</h1>
</div>
<script>
new Vue({
el: '#app',
data: {
ok: true
}
})
</script>
</body>
</html>
7、v-if 和v-show都是隐藏和显示DOM节点,区别是v-show是给DOM节点设置display属性,而 v-if 则是在DOM中增加/删除节点。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p v-if="seen">红消香断有谁怜?</p>
<template v-if="ok">
<h1>花谢花飞花满天</h1>
<p>伤心桥下春波绿</p>
<p>曾是惊鸿照影来!</p>
</template>
</div>
<script>
new Vue({
el: '#app',
data: {
seen: true,
ok: true
}
})
</script>
</body>
</html>
8、v-for,循环,绑定数组的数据来渲染一个项目列表,格式 v-for=“字段名 in(of) 数组json”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>v-for指令</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div>
<label>Id
<input type="text" v-model="id">
</label>
<label>Name
<input type="text" v-model="name">
</label>
<input type="button" value="添加" @click="add">
</div>
<p v-for="item in list" :key="item.id">
<!-- <input type="checkbox" name="" id=""> 添加选择框-->
<input type="checkbox"> {{item.id}} ---{{item.name}}
</p>
</div>
<!-- built files will be auto injected -->
<script>
var vm = new Vue({
el: '#app',
data:{
id:'',
name:'',
list:[
{id: 1, name:'王勃'},
{id: 2, name:'杨炯'},
{id: 3, name:'卢照邻'},
{id: 4, name:'骆宾王'},
]
},
methods: {
add(){
// this.list.push({ id:this.id, name:this.name})
this.list.unshift({ id:this.id, name:this.name})
}
}
});
// [].forEach((item, i)=>{})
</script>
</body>
</html>
9、v-on 绑定事件(处理用户输入) 函数必须写在methods里面,格式v-on:事件名=“函数名”,简写@事件名=“函数名”
//v-on 指令,它用于监听 DOM 事件:在这里参数是监听的事件名。
<a v-on:click="doSomething">
//修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。
//例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():
<form v-on:submit.prevent="onSubmit"></form>
10、v-model,双向绑定数据,格式 v-model=“变量名”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>事件修饰计算器</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="n1">
<select v-model="opt">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" v-model="n2">
<input type="button" value="=" @click="calc">
<input type="text" v-model="result">
</div>
<!-- built files will be auto injected -->
<script>
var vm = new Vue({
el: '#app',
data:{
n1:0,
n2:0,
result:0,
opt:'+' //默认值
},
methods: {
calc() {//计算器的方法
//逻辑
switch(this.opt){
case'+':
this.result = parseInt(this.n1) + parseInt(this.n2)
break;
case'-':
this.result = parseInt(this.n1) - parseInt(this.n2)
break;
case'*':
this.result = parseInt(this.n1) * parseInt(this.n2)
break;
case'/':
this.result = parseInt(this.n1) / parseInt(this.n2)
break;
}
}
}
})
</script>
</body>
</html>
11、v-once,进入页面时只能渲染一次,以后不再渲染。如果用到事件中也只执行一次(@click.once=“show”)
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-once>{{msg}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data:{
msg:"hello"
}
})
</script>
</body>
</html>
12、v-pre,把标签内的元素原样输出
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-pre>欢迎---{{msg}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data:{
msg:"你好"
}
})
</script>
</body>
</html>
13、v-cloak,防止闪烁
<!DOCTYPE html>
<html>
<head>
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
<div id="box">
<div v-cloak=''>欢迎---{{msg}}</div>
</div>
<script type="text/javascript">
new Vue({
el:"#box",
data:{
msg:"hello"
}
})
</script>
</body>
</html>