一、组件化
代码示例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="test">
<ol>
<todo-item></todo-item>
</ol>
</div>
</body>
<script>
//组件化
Vue.component('todo-item', {
template: '<li>这是个待办项</li>'
})
var test = new Vue({
el: '#test'
})
</script>
</html>
演示:
进阶使用:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="test">
<ol>
<todo-item v-for="item in testList" v-bind:todo="item" v-bind:key="item.id"></todo-item>
</ol>
</div>
</body>
<script>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{todo.text}}</li>'
})
var test = new Vue({
el: '#test',
data: {
testList: [
{ id: 0, text: '啊' },
{ id: 1, text: '哦' },
{ id: 2, text: '嗯' }
]
}
})
</script>
</html>
效果:
二、实例
创建实例:
var test = new Vue({...})
当一个 Vue 实例被创建时,它将 data
对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。
// 我们的数据对象
var data = { a: 1 }
// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
data: data
})
// 获得这个实例上的 property
// 返回源数据中对应的字段
vm.a == data.a // => true
// 设置 property 也会影响到原始数据
vm.a = 2
data.a // => 2
// ……反之亦然
data.a = 3
vm.a // => 3
这里唯一的例外是使用 Object.freeze()
,这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。
测试用例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="test1">
{{a}}
</div>
<div id="test2">
{{foo}}
<button v-on:click="foo = 'baz'">Change it</button>
</div>
</body>
<script>
var data = { a: 3 };
var vm1 = new Vue({
el: '#test1',
data: data
})
//freeze()
var obj = { foo: 'bar' }
Object.freeze(obj)
var vm2 = new Vue({
el: '#test2',
data: obj
})
</script>
</html>
效果:
三、实例生命周期钩子
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
比如 created
钩子可以用来在一个实例被创建之后执行代码:
new Vue({
data: {
a: 1
},
created: function () {
// `this` 指向 vm 实例
console.log('a is: ' + this.a)
}
})
// => "a is: 1"
也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mounted
、updated
和 destroyed
。生命周期钩子的 this
上下文指向调用它的 Vue 实例。
下面是官方给的一张生命周期图示: