02-Vue基础-Vue基本特性
Vue 的一些特性
1. 生命周期函数
每个Vue
实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到DOM
并在数据变化时更新DOM
等。同时在这个过程中也会运行一些叫做生命周期钩子
的函数,我们可以利用这些钩子,在合适的时机执行我们的业务逻辑。
1.1. 生命周期实例
比如created
钩子可以用来在一个实例被创建之后执行代码:
<!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>Vue 生命周期</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">Vue 生命周期函数</div>
<script>
var vm = new Vue({
el: "#app",
data: {
a: 1
},
created() {
// `this` 指向 vm 实例
console.log("a is: " + this.a); // a is: 1
}
});
</script>
</body>
</html>
也有一些其它的钩子,在实例生命周期的不同阶段被调用,如mounted
、updated
和destroyed
。生命周期钩子的this
上下文指向调用它的Vue
实例。
1.2. 生命周期图示
下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。
2. 过滤器
Vue
支持在{{ }}
插值的尾部添加一个管道符|
对数据进行过滤,经常用于格式化文本,比如字母全部大写、货币千位使用逗号分隔等。过滤的规则是自定义的,通过给Vue
实例添加选项filters
来设置,如下实例,对时间进行格式化显示:
<!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>Vue 过滤器</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{ date | formatDate }}
</div>
<script>
// 在月份、日期、小时等小于10时前面补0
var padDate = function(value) {
return value < 10 ? "0" + value : value;
};
var vm = new Vue({
el: "#app",
data: {
date: new Date()
},
filters: {
// 过滤时间数据
formatDate: function(value) {
var date = new Date(value);
var year = date.getFullYear();
var month = padDate(date.getMonth() + 1);
var day = padDate(date.getDate());
var hours = padDate(date.getHours());
var minutes = padDate(date.getMinutes());
var seconds = padDate(date.getSeconds());
// 返回最终结果
return (
year +
"-" +
month +
"-" +
day +
" " +
hours +
":" +
minutes +
":" +
seconds
);
}
},
mounted() {
// 声明一个变量指向Vue实例this ,保证作用域一致
var _this = this;
this.timer = setInterval(function() {
// 修改data的数据
_this.date = new Date();
}, 1000);
},
beforeDestroy() {
if (this.timer) {
// 在Vue实例销毁前,清除我们的定时器
clearInterval(this.timer);
}
}
});
</script>
</body>
</html>
过滤器也可以串联,也可以接收参数:
<!-- 串联 -->
{{ message | filterA | filterB }}
<!-- 接收参数 -->
{{ message | filterA('arg1', 'arg2') }}
注意
:这里的字符串参数arg1
和arg2
将分别传递给过滤器的第二个和第三个参数,因为第一个参数是数据本身。
3. 指令与事件
Vue
指令是一种带v-
前缀标识的标签属性,它具有特殊的功能,在Vue
中,指令的使用非常普遍,比如v-if
、v-bind
、v-for
等。
指令的主要职责是,当表达式的值改变时,相应的将某些行为应用到DOM
上,比如下面的案例:
<div id="app">
<!-- v-if 表示条件判断,它可以是具体的值,也可以是变量,还可以是表达式,当最终结果为true时,它将在DOM节点进行渲染,否者移除节点元素 -->
<p v-if="show">显示文本</p>
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
show: true
}
});
</script>
下面介绍两个最常见的指令:v-bind
和v-on
v-bind
v-bind
会动态更新HTML
元素上的属性,比如class
、value
、id
等,如下案例展示了v-bind
指令绑定数据到属性上:
<div id="app">
<a v-bind:href="url">链接</a>
<img v-bind:src="imgUrl" />
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
url: "https://www.baidu.com",
imgUrl: "http://xxx.xxx.xx/img.png"
}
});
</script>
示例中的链接地址和图片地址都与数据进行了绑定,当改变url
和imgUrl
数据时,链接和图片都会自动更新。
v-on
v-on
用来绑定监听事件的,这样,我们就可以做一些交互操作。示例如下:
<div id="app">
<p v-if="show"> 这是一段文本 </p>
<button v-on:click="handleClose">点击隐藏</button>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
show: true
},
methods: {
handleClose() {
this.show = false;
}
}
});
</script>
在button
标签上,我们使用v-on:click
绑定一个点击事件,v-on
可以监听原生的DOM
事件,除了click
外,还可以监听多种事件,比如:focus
、keyup
、mousemove
等。表达式一般是一个方法名,方法名一般采用驼峰命名法,方法可以接收参数,比如事件参数event
。
方法一般会定义在methods
属性里,可以使用this
指针在其他方法中调用方法。
4. 语法糖
语法糖是指在不影响功能的情况下,添加某种方法实现同样的效果,从而优化程序开发。
其实Vue
为v-bind
和v-on
指令都提供了语法糖,比如v-bind
可以省略,直接写一个:
即可:
<!-- 原始格式 -->
<a v-bind:href="url">链接</a>
<!-- 语法糖格式 -->
<a :href="url"></a>
v-on
也可以直接省略,使用@
符号来缩写:
<!-- 原始格式 -->
<button v-on:click="handleClose">点击隐藏</button>
<!-- 语法糖格式 -->
<button @click="handleClose">点击隐藏</button>
使用语法糖可以简化代码书写,以后的代码示例将默认采用语法糖的格式进行书写。
5. 章节总结
本章节我们了解一些Vue
的一些语法特性,比如,生命周期钩子、数据绑定、过滤器等特性,从这些内容,我们知道了怎么去绑定一个数据,让它自动更新,还有Vue
指令,通过指令操作,我们可以对页面进行渲染。在下面的章节,我们将继续探讨这些属性,本章节只是简单了解一下。相信,经过章节的小示例,你了解了怎么去编辑一个Vue
程序。
当你发现你的才华撑不起你的野心,那就努力学习吧!