创建一个vue实例
1 | var vm = new Vue({ |
数据与方法
1 | // 我们的数据对象 |
当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时 data 中存在的属性是响应式的。
除了 data 属性,Vue 实例暴露了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。例如:1
2
3
4
5
6
7
8
9
10
11var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})
vm.$data === data // => true
vm.$el === document.getElementById('example') // => true
// $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {
// 这个回调将在 `vm.a` 改变后调用
})
实例生命周期
每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户机会在一些特定的场景下添加他们自己的代码。
比如 created 钩子可以用来在一个实例被创建之后执行代码:
1 | new Vue({ |
也有一些其它的钩子,在实例生命周期的不同场景下调用,如 mounted、updated、destroyed。钩子的 this 指向调用它的 Vue 实例。
使用javascript表达式
1 | **那个绑定只能包含单个表达式** |
计算属性和观察者
计算属性
模板内部的表达式相对来说是便利的,在模板内不放如果的表达式的话显得过于臃肿,1
2
3<div>
{{message.split('').reverse().join('')}}
</div>
如果多个地方用到 比较难以维护
demo1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<div id='demo'>
<p>{{messge}}</p>
<p>{{reversedMessage}}</p>
</div>
--------js-------
var vm = new Vue({
el:'#demo',
data:{
message:'hello word'
},
computed:{ //针对某个属性进行计算 设置名称
reversedMessage:function(){
return this.message.split('').reverse().join('')
}
}
})
当属性message变化的时候 revenseMessage也会发生改变
计算属性的缓存vs方法
上诉的方式我也可以使用生命一些方法去 代替
1 | <p>{{reverseMessage}}</p> |
也能达到同样的效果
方法需要多次调用计算
computed 设置有缓存不需要多次计算 效率相对来说比较高
计算属性vs被观察者属性
1 | Vue.component('todo-item', { |
计算属性
计算属性默认只有getter 也可以提供一个setter属性1
2
3
4
5
6
7
8
9
10
11
12
13
14computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
观察者(重点)
1 | <script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script> |
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的 watcher。这是为什么 Vue 通过 watch 选项提供一个更通用的方法,来响应数据的变化当你想要在数据变化响应时,执行异步操作或开销较大的操作,这是很有用的。
watch 监控变量是否发生变化 变化的话调用getAnswer()方法发送请求