-
生命周期钩子的函数,可以在不同阶段设置数据监听
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
{{ a }}
</div>
<script type="text/javascript">
var data = { a: 1 };
var vm =new Vue({
el: '#vm',
data: data,
beforeCreate:function(){
console.log('beforeCreate');
},
created: function () {
// `this` 指向 vm 实例
console.log('a is: ' + this.a);
},
beforeMount: function(){
console.log("beforeMount");
},
mounted: function(){
console.log("mounted")
}
});
</script>
</body>
</html>
- 模板语法
v-once指令,一次性地插值,当数据改变时插值处的内容不会更新
image.png
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm" v-once>
{{ a }}
</div>
<script type="text/javascript">
var data = { a: 1 };
var vm =new Vue({
el: '#vm',
data: data
});
vm.$data.a=2
</script>
</body>
</html>
v-html标签,加入html元素
image.png
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm" v-once>
<p v-html="rawHtml">{{rawHtml}}</p>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
rawHtml:'<span style="color: red;">爱测试的小刺猬</span>'
}
});
</script>
</body>
</html>
v-bind标签,绑定动态属性
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm" v-once>
<p v-html="rawHtml">{{rawHtml}}</p>
<div v-bind:class="color">2022年1月16日</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
rawHtml:'<span style="color: red;">爱测试的小刺猬</span>',
color: 'blue'
}
});
</script>
<style type="text/css">
.blue{color:blue; font-size: 50px;}
</style>
</body>
</html>
v-bind还可以与href结合,超链接的动态属性
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<a v-bind:href="url">{{content}}</a>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
url:'https://www.baidu.com/',
content:'爱测试的小刺猬'
}
});
</script>
</body>
</html>
js表达式
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<p>{{number+1}}</p>
<p>{{ok?'yes':'no'}}</p>
<p>{{1>3?'yes':'no'}}</p>
<p>{{message.split('').reverse().join('')}}</p>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
number:10,
ok: false,
message:'爱测试的小刺猬'
}
});
</script>
</body>
</html>
- 指令语法
根据v-if里的变量为true时里面的内容才会被渲染
image.png
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<p v-if="seen">{{content}}</p>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
seen:true,
content:'爱测试的小刺猬'
}
});
</script>
</body>
</html>
函数 methods
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div @click="click1">
<div @click="click2">
{{content}}
</div>
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
content:'爱测试的小刺猬'
},
methods:{
click1: function(){
console.log('第一次点击...');
},
click2: function(){
console.log('第二次点击...');
}
}
});
</script>
</body>
</html>
属性 .stop 只执行click2,不执行父标签click1
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div @click="click1">
<div @click.stop="click2">
{{content}}
</div>
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
content:'爱测试的小刺猬'
},
methods:{
click1: function(){
console.log('第一次点击...');
},
click2: function(){
console.log('第二次点击...');
}
}
});
</script>
</body>
</html>
- class与style的绑定
动态标签
image.png
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div v-bind:class="{ active: isActive }"
style="width: 200px;height: 200px; text-align: center;line-height: 200px;">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
isActive:true
}
});
</script>
<style>
.active{background-color: crimson;}
</style>
</body>
</html>
普通标签
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div
class="test"
v-bind:class="{ active: isActive }"
style="width: 200px;height: 200px; text-align: center;line-height: 200px;">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
isActive:true
}
});
</script>
<style>
.active{background-color: crimson;}
.test{background-color: aqua; font-size: 30px;}
</style>
</body>
</html>
多个动态属性
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div
class="test"
v-bind:class="{ active: isActive, green: isGreen}"
style="width: 200px;height: 200px; text-align: center;line-height: 200px;">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
isActive:true,
isGreen: true
}
});
</script>
<style>
.active{background-color: crimson;}
.green{background-color: forestgreen; font-size: 30px;}
</style>
</body>
</html>
动态绑定样式之三目运算符
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div
class="test"
v-bind:class="[isActive?'active':'', isGreen? 'green': '']"
style="width: 200px;height: 200px; text-align: center;line-height: 200px;">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
isActive:true,
isGreen: true
}
});
</script>
<style>
.active{background-color: crimson;}
.green{background-color: forestgreen; font-size: 30px;}
</style>
</body>
</html>
动态标签与内联样式
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div
:style="{color : color , fontSize : size}">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
color:'#FF0000',
size: '50px'
}
});
</script>
</body>
</html>
内联属性+三目运算符
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div
:style="{color : color, fontSize : size, background : isBlue?'#0000ff':''}">
hi vue
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
color:'#FF0000',
size:'30px',
isBlue: true
}
});
</script>
</body>
</html>
- 条件渲染
v-if条件性渲染是惰性的,v-show始终会渲染并保留在dom中;所以v-show初始化会比较开销资源,而v-if在频繁切换的时候会比较开销资源;需要频繁切换的时候选择v-show,不需要频繁切换的时候选择v-if
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div v-show="seen">
{{content}}
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
seen: false,
content:'爱测试的小刺猬'
}
});
</script>
</body>
</html>
v-else-if条件选择
image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="vm">
<div v-if="sleeping">
{{content_s}}
</div>
<div v-else-if="working">
{{content_w}}
</div>
<div v-else="studing">
{{content_d}}
</div>
</div>
<script type="text/javascript">
var vm =new Vue({
el: '#vm',
data: {
working: false,
content_w:'爱测试的小刺猬在上班',
sleeping: false,
content_s:'爱测试的小刺猬在睡觉',
studing: true,
content_d:'爱测试的小刺猬在学习',
}
});
</script>
</body>
</html>