vue是什么
Vue是一套用于构建用户界面的渐进式(自底向上逐层的应用)js框架。
vue.js的特点
- 采用组件化模式,提高代码复用率,代码更好维护
- 声明式编码,无需直接操作DOM,提高开发效率
- 使用虚拟DOM+Diff算法,尽量复用DOM节点
vue.js的安装
- 直接CDN引入
- 下载和引入
- NPM安装
vue初体验
- 代码做了什么事情
我们来阅读JavaScript代码,会发现创建了一个Vue对象
创建Vue对象的时候,传入了一些options:{}
①{}中包含了el属性:该属性决定了这个Vue对象挂载到哪一个元素上,很明显,我们这里是挂载到了id为app的元素上
②{}中包含了data属性:该属性中通常会存储一些数据
Tips:这些数据可以是我们直接定义出来的,比如像上面这样,也可能是来自网络,从服务器加载的 - 数据列表
HTML代码中,使用v-for指令<li v-for="item in movies">{{item}}</li>
- 计数器
新的属性:methods
该属性用于在Vue对象中定义方法
新的指令:@click
该指令用于监听某个元素的点击事件,并且需要指定当发生点击时,执行的方法(方法通常是methods中定义的方法)
vue的MVVM
- vue中的MVVM
View层(视图层):
在我们前端开发中,通常就是DOM层。
主要的作用是给用户展示各种信息。
Model层(数据层):
数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据。
在我们计数器的案例中,就是后面抽取出来的obj,当然,里面的数据可能没有这么简单。
ViewModel层(视图模型层):
视图模型层是View和Model沟通的桥梁。
一方面它实现了Data Binding,也就是数据绑定,将Model的改变实时的反应到View中;另一方面它实现了DOM Listener,也就是DOM监听,当DOM发生一些事件(点击、滚动、touch等)时,可以监听到,并在需要的情况下改变对应的Data。 - 计数器的MVVM
我们的计数器中就有严格的MVVM思想
View依然是我们的DOM
Model就是我们我们抽离出来的obj
ViewModel就是我们创建的Vue对象实例
它们之间如何工作呢?
首先ViewModel通过Data Binding让obj中的数据实时的在DOM中显示
其次ViewModel通过DOM Listener来监听DOM事件,并且通过methods中的操作,来改变obj中的数据
有了Vue帮助我们完成VueModel层的任务,在后续的开发,我们就可以专注于数据的处理,以及DOM的编写工作了
vue的options
- 详细解析
el:
类型:string | HTMLElement
作用:决定之后Vue实例会管理哪一个DOM
data:
类型:Object | Function (组件当中data必须是一个函数)
作用:Vue实例对应的数据对象
methods:
类型:{ [key: string]: Function }
作用:定义属于Vue的一些方法,可以在其他地方调用,也可以在指令中使用
编辑器
- 代码规范
2个空格(File→Settings→Editor→Code Style→HTML/CSS/JS→选择2→回到Code Style→取消勾选Indents Detection) - 制作代码模板
(File→Settings→Live Templates→Vue→选择加号→粘贴代码→输入vue→底部Define勾选HTML→确定)
生命周期
- Vue的生命周期是什么
Vue实例对象从开始创建、初始化数据、编译模板、挂载DOM-渲染、更新-渲染、卸载等一系列的过程,就是Vue的生命周期。 - Vue的生命周期的八个钩子函数:
beforeCreat()创建前 在new一个vue实例后,只有一些默认的生命周期钩子和默认事件,其他的东西都还没创建。在此生命周期执行的时候,data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法
created()被创建 data 和 methods都已经被初始化好了,可以调用了
beforeMount()挂载前 在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的
mounted()已挂载 Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。 如果我们想要通过插件操作页面上的DOM节点,最早可以在和这个阶段中进行
beforeupdate()更新前 页面中的显示的数据还是旧的,data中的数据是更新后的, 页面还没有和最新的数据保持同步
updated()更新 页面显示的数据和data中的数据已经保持同步了,都是最新的
beforeDestroy()销毁前 Vue实例从运行阶段进入到了销毁阶段,这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于可用状态。还没有真正被销毁
destroyed()被销毁 这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于不可用状态。组件已经被销毁了。 - keep-alive组件激活时调用的两个生命周期函数activated,deactivated
<keep-alive>
是Vue的内置组件,可以使被包含的组件保留状态,防止重新渲染DOM。当组件在<keep-alive>
内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。 - Vue生命周期的作用是什么
Vue 所有的功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑 - 第一次页面加载会触发哪几个钩子
第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子 - DOM渲染在哪个周期中已经完成
mounted - 简述每个周期具体适合哪些场景
beforecreate:可以在这加个loading事件,在加载实例时触发
created:初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
mounted:挂载元素,获取到DOM节点
updated:如果对数据统一处理,在这里写上相应函数
beforeDestroy:可以做一个确认停止事件的确认框
nextTick:更新数据后立即操作dom - created和mounted的区别
created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。