3、使用虚拟DOM+优秀的Diff算法,尽量复用DOM节点。
1、Vue实例与HTML容器是一一对应的,使用el属性让容器与Vue实例关联起来。
2、Vue可以使用插值语法(双层花括号)解析Vue的data属性,插值语法还可以解析其他的js表达式(所谓js表达式,就是可以产生一个值的js语句,一般为元素赋值语句的等号右边部分或者函数的返回值)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="../js/vue.js"></script>
<title>初始Vue</title>
</head>
<body>
<script type="text/javascript">
Vue.config.productionTip = false; // 开发环境, 关闭vue对于生产环境的提示信息
</script>
<div id = "r1">
<h1>
{{msg}} // vue的插值语法
</h1>
</div>
<script type="text/javascript">
const x = new Vue({
el: "#r1", // el element 元素 表示当前vue实例要控制的区域 类似css的条件选择器
data: {
msg: "hello vue"
}
});
</script>
</body>
</html>
Vue模板语法有2大类:
1、插值语法:
2、指令语法:
v-bind:href = "***"
或简写为 ::href="***"
,***同样要写js表达式,且可以直接读取到data中的属性。v-bind
还有很多v-???
的属性。<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="../js/vue.js"></script>
<title>初始Vue</title>
</head>
<body>
<script type="text/javascript">
Vue.config.productionTip = false; // 开发环境, 关闭vue对于生产环境的提示信息
</script>
<div id = "root">
<h1>
差值语法
<h3>{{name}}</h3> // vue的插值语法
</h1>
<h1>
指令语法
<a v-bind:href="school.url.toUpperCase()">点我去{{school.url}}学习</a>
</h1>
</div>
<script type="text/javascript">
const x = new Vue({
el: "#root", // el element 元素 表示当前vue实例要控制的区域 类似css的条件选择器
data: {
name: 'jack'
school:{
name:'ULCA',
url:'https://www.ulca.com'
}
}
});
</script>
</body>
</html>
Vue中有2中数据绑定方式:
el:
.$mount('#root')
绑定下边演示了一个案例,使用一个定时器,在1秒后再建立vue实例与html容器之间的关联。
data:
Object.defineProperty()字面意思就是可以为对象设置属性,且在设置属性时,可以控制属性的一些高级选项:
v-on:×××
或@×××
绑定事件,其中×××
是事件名。method
对象中,最终会在vm上。@click="demo" 和 @click="deme($event)"
效果是一致的,但是后者可以给函数传参数。Vue中的事件修饰符:
计算属性的重点突出在属性两个字上(属性是名词),首先它是个属性其次这个属性有计算的能力(计算是动词),这里的计算就是个函数;简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此而已;可以想象为缓存!
计算在虚拟dom中进行,计算结果在缓存中,不会随时间变化,当计算属性中的参数有更新时,虚拟dom清空,重新计算,这时计算属性才会发生变化。
注意计算属性是vue component的属性,可以用方法定义,但不可用作方法调用。
计算属性的优势:有缓存,多次调用,只计算一次。仅当计算所依赖的数据变化后才会重新修改。
computed: {
fullname:{
get(){
return this.firstName + '-' + this.lastName;
}
}
}
计算属性:也可以使用函数返回值设置,但是methods,computed 方法名不能重名,重名字后,只会调用methods的方法。
computed: {
//计算属性:methods,computed 方法名不能重名,重名字后,只会调用methods的方法
fullname: function () {
return this.firstName + '-' + this.lastName;
}
// 或者函数也可直接这样写:
fullname() {
return this.firstName + '-' + this.lastName;
}
}
监视属性有两种配置方式:
watch
.$watch
方法主要是可以设置handler(new, old)方法,每次监测的值变化时,都会调用该方法。
和计算属性一样,监测属性也可以进行简写:
监视多级结构中的某个属性时,使用’number.a’指定对象的key。
深度监视:
在下边的例子中number对象开启了深度监测,无论属性a还是b变化,都会触发handler()。
两个重要的小原则: