<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div @click="fn">{{msg}}</div>
</div>
<script src="vue.js"></script>
<script>
// 生命周期:
// Vue 的实例具备生命周期,Vue 的实例在生成的时候,会经历一系列的初始化的过程;数据的监听,编译模板,实例挂载DOM元素,或者数据更新致使 DOM 更新,在执行的过程当中,会运行一些叫作生命周期的钩子函数,在 Vue 实例生命周期中特定的时间点执行的函数称为生命周期的钩子函数;
// 若是咱们须要在某个生命周期处理一些事情,咱们能够把这些事情写在钩子函数中;等到 Vue 的实例生命周期到这个阶段就会执行这个钩子,而咱们要作的事情也就得以处理了
// 生命周期的钩子函数不能人为的控制其执行的顺序;
let vm = new Vue({
data: {
msg: 'hello'
},
methods: {
fn() {console.log(11111)}
},
beforeCreate() {
// 在实例初始化以后,数据观测 (data observer) 和 watch 配置以前被调用。
console.log(1);
console.log(this.msg);
console.log(this.$el); // this.$el 是根 DOM 元素
},
created() {
// 在实例建立完成后被当即调用。在这一步,实例已完成数据观测、属性和方法的运算、watch/event 事件回调
// 可是在现阶段尚未开始挂载,即还没挂载到根 DOM 元素上,因此 this.$el 属性不可见
console.log(2);
console.log(this.msg);
console.log(this.$el);
},
beforeMount() {
// 在挂载开始以前被调用,建立虚拟DOM(Virtual-DOM);虚拟 DOM 不是真实的 DOM 元素,而是 js 对象,其中包含了渲染成 DOM 元素信息;
console.log(3);
console.log(this.msg);
console.log(this.$el);
},
mounted() {
// 把 Vue 的虚拟DOM挂载到真实的 DOM 上;
// 若是要在 Vue 中获取 DOM 元素对象,通常在这个钩子中获取
// 项目中的 ajax 请求通常会在这里或者 created 里发送;
console.log(4);
console.log(this.msg);
console.log(this.$el);
},
// 只有当数据发生变化时,才会触发这个函数;
beforeUpdate() {
console.log(5)
},
updated() {
// 因为数据更改致使的虚拟 DOM 从新渲染和打补丁,在这以后会调用该钩子。
console.log(6);
},
beforeDestroy() {
// 在 Vue 的实例被销毁以前调用,若是页面中有定时器,咱们会在这个钩子中清除定时器;
console.log(7);
},
destroyed() {
// Vue 实例销毁后调用,实例中的属性也再也不是响应式的,watch 被移除
console.log(8);
}
});
vm.$set(vm, 'msg', 'hello world'); // 由于 Vue 的数据都是响应式的,只有修改数据才会触发 beforeUpdate 和 updated 钩子
vm.$mount('#app'); // 当建立实例时不传递 el 属性,能够手动挂载到 DOM 节点;
vm.$destroy(); // 手动销毁实例;
</script>
</body>
</html>
复制代码
ue 是数据驱动 不提倡操做DOM 可是有时候必须操做DOM 所以VUE 提供了一个行内属性 来获取DOM vm.$refs 是Vue提供的实例 专门用来获取DOM元素的html
在须要获取的标签内添加ref = "标识符" 行内属性 而后在Vue的实例中 经过vm.refs将会得到一个数组**vue
Vue 的DOM 更新是异步的 若咱们想从新获取更新数据后的渲染出来的DOM咱们须要使用nextTickajax
this.$nextTick(callback)
复制代码
callback 放到DOM更新后执行数组
<template id = 'p1'>
<div>
<p v-for = "(a,i) in arr">{{a}}</p>
</div>
</template>
let vm = new Vue({
el:'#app',
data:{
msg:'aaaa',
arr:[1,2,3,4]
},
//template:'#p1' //HTML模板形式
template:`<div><p v-for = "(a,i) in arr">{{a}}</p></div>` //模板字符串
})
复制代码
<div><p v-for = "(a,i) in arr">{{a}}</p></div>
或 template:'#id'