1.初识Vue

Vue是一套用于构建用户界面的渐进式框架,Vue 被设计为可以自底向上逐层应用,Vue的核心是只关注视图层(如何理解),不仅易于上手,还便于与第三方库或既有项目整合。

  • 渐进式框架:渐进也可以理解为一步一步的意思,大概意思就是使用Vue的时候,并不需要把整个框架的所有东西都用上,可以根据实际情况选择你需要的部分;也意味着可以使用Vue作为项目的一部分。
  • 自底向上逐层应用:由基层开始做起,把基础的东西写好,再逐层往上添加效果和功能。
  • 组件化:按功能分为不同组件,利于代码复用。
  • 声明式:编程范式的一种,简单的说,你只需要告诉计算机,你要得到什么样的结果,计算机则会完成你想要的结果。以Vue为例,在页面中通过 {{xxx}} 显示一个data里面的变量,你只需要改变这个变量,页面就会跟着刷新,这就是你只需要结果,vue 内部去处理过程,这就是声明式编程。对应命令式编程(原生js就是命令式,你得详细地命令如何处理)。

1.1 MVVM是什么?

MVVM 模式,顾名思义即 Model-View-ViewModel 模式。

1.1.1 MVVM简介

Model 层:
对应数据层的域模型,它主要做域模型的同步。
通过 Ajax/fetch 等 API 完成客户端和服务端业务 Model 的同 步。在层间关系⾥,它主要⽤于抽象出 ViewModel 中视图的data。

View 层:
作为视图模板存在,在 MVVM ⾥,整个 View 是⼀个动态模板,在前端开发中,通常就是指DOM。
除了定义结构、布局外,它展示的是 ViewModel 层的数据和状态。View 层不负责处理状态, View 层做的是数据绑定的声明、 指令的声明、 事件绑定的声明

ViewModel 层:
把 View 需要的层数据暴露,并对 View 层的 数据绑定声明、 指令声明、 事件绑定声明 负责,也就是处理 View 层的具体业务逻辑。 ViewModel 底层会做好绑定属性的监听。
当 ViewModel 中数据变化, View 层会得到更新;⽽当 View 中声明了数据的双向绑定(通常是表单元素),框架也会监听 View 层(表单)值的变化。⼀旦值变化,View 层绑定的 ViewModel 中的数据也会得到⾃动更新。

1.1.2 计数器案例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="./js/vue.js"></script></head><body><!-- dom是 view层 --><div id="app"><div>当前计数:{{num}}</div><!-- 命令式,不需要获取元素再添加监听事件了 --><button @click="num++">+</button><button @click="num--">-</button></div><script>// vm实例是 viewModel层//  viewModerl层通过数据绑定让model实时的在DOM中显示// viewModerl层通过事件监听来监听DOM事件,并改变vm中的datalet vm = new Vue({el: '#app',// data是 model层data() {return {num: 0,};},});</script></body>
</html>

1.2 Vue的特点

  1. 遵循 MVVM 模式,解耦视图和数据
  2. 编码简洁,体积小,运行效率高,适合移动/PC端开发
  3. 它本身只关注 UI,可以轻松引入 vue 插件或其它第三方库开发项目
  4. 采用组件化模式,提高代码复用率、且让代码更好维护
  5. 声明式编码,让编码人员无需直接操作DOM,提高开发效率
  6. 状态管理
  7. 使用虚拟DOM和Diff算法,尽量复用DOM节点

1.3 Vue与其他前端 JS 框架的关联

  1. 借鉴 angular 的 模板数据绑定 技术
  2. 借鉴 react 的 组件化虚拟DOM 技术

1.4 Vue 扩展插件

  • vue-cli:vue 脚手架
  • vue-resource(axios):发送ajax请求
  • vue-router:路由
  • vuex:状态管理(它是 vue 的插件但是没有用 vue-xxx 的命名规则)
  • vue-lazyload:图片懒加载
  • vue-scroller:页面滑动相关
  • mint-ui:基于 vue 的 UI 组件库(移动端)
  • element-ui:基于 vue 的 UI 组件库(PC 端)

2. 创建Vue应用

2.1 Vue的两个版本(开发者/生产环境)

  • 开发版本:包含完整的警告和调试模式
  • 生产版本:删除了警告,37.36KB min+gzip
    关闭生产提示
    // 设置为 false 以阻止 vue 在启动时生成生产提示。
    Vue.config.productionTip = false;

2.2 安装Vue Devtools

  • vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们的调试效率。

2.3 引入(安装)Vue的两种方式

  1. 本地引入

    • 本地下载vue.js文件,并引入
<script type="text/javascript" src="../js/vue.js"></script>
  1. CDN引入

    • CDN:内容分发网络,是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
    • 不需要下载vue.js文件 ,引入也可以选择版本哦
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
  1. npm安装vue-cli构建

    • 脚手架直接构建,后续补充操作。

2.4 创建Vue实例对象的步骤

  1. 准备一个容器 (模板)
  2. Vue.config.productionTip = false 可以关闭生产提示
  3. new Vue({})创建Vue实例传入,选项对象options
  4. 配置options,如:el、data、methods、computed、watch、生命周期钩子…
  5. 当一个 Vue 实例(vm)被创建时,它将 data 对象中的所有的 property 加入到Vue实例对象的响应式系统中,之后在模板里可以直接使用data里的属性。
    例:
<!-- 容器(模板) -->
<!-- root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法(插值/指令语法) -->
<div id="app"> {{message}}
</div>
// 声明一个Vue实例对象,Vue构造函数的参数就是配置项;真实开发中只有一个Vue实例,并且会配合着组件一起使用
var vm = new Vue({// el值通常为css的选择器,会去寻找容器,就把【当前】Vue实例和容器建立了联系// data中用于存储数据,数据供el指定的容器去使用;值我们暂时先写成一个对象,实际开发中为函数的形式// 一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新;el:'#app',data:{message:"hello vue!"}
})

注意点:
1. 此时,data和DOM就被建立了关联(模型和视图解耦),所有数据都是响应式的(单向数据绑定,通过Object.defineProperty的getter、setter进行数据劫持实现的;而data中的数据出现在vm身上是数据代理)。
2. 打开浏览器控制台,修改app.message的值,页面内容也会改变。
3. 值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的。
4. 通过…设置,可使得后添加的也是响应式。
5. 使对象不可被修改的方法:Object.freeze()

var obj = {  foo: 'bar'}
Object.freeze(obj)
new Vue({  el: '#app', data: obj}
)
<div id="app">  <p>{{ foo }}</p>  <!-- 这里的 `foo` 不会更新! -->  <button v-on:click="foo = 'baz'">Change it</button>
</div>

2.3.1关于el的两种写法的区别

el(element)的值通常是选择器,用于挂载要管理的元素 使得Vue实例(viewModel)和容器(DOM)关联一一el有两种写法
(1) new Vue时候配置el属性。

const vm = new Vue({el:'#root', //第一种写法data:{name:'pqq'}
})

(2) 先创建Vue实例,随后再通过vm.$mount(’#root’)指定el的值。

data:{name:'pqq'}
})
vm.$mount('#root') //第二种写法,挂载

2.3.2关于data的两种写法的区别

(1) 对象式

data: {a:1
}

(2)函数式(组件中必须使用这种写法!!!)

data() {return {a:1}
}

注意点!why:
JS中,简单的数据类型就是浅拷贝,复杂的数据类型就需要用到深拷贝。
因为项目中每个组件都可能会被复用,组件作为标签每次被复用,都是一个相应的组件实例被new,只有使用函数式而非对象式,每个组件实例之间的数据才不会相互影响;类似深拷贝!

2.3.3 两种书写options的方式

Vue 实例还暴露了一些有用的实例 property 与方法。它们都有前缀 $,以便与用户定义的 property 区分开来。例如:

var 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` 改变后调用})

2.3.3一个重要的原则

由Vue管理的函数,如data() {}、mounted(){} …的this指向Vue实例对象或者组件实例对象,因此一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。
因为箭头函数中的this指向的是定义时的this,而不是执行时的this。

3. Vue的生命周期

3.1 Vue的生命周期是什么

生命周期

  • 又名:生命周期回调函数、生命周期函数、生命周期钩子。
  • 是什么:new Vue({})其实是调用了Vue源码里的Vue构造函数,而生命周期钩子就是在执行到某一时刻,帮我们自动调用的options写的,有着特殊名称的回调函数。
  • 作用:通知我们实例化到哪一步了,于是我们可以在某些时期在函数内部做想做的事情。
  • 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
  • 生命周期函数中的this指向是 Vue实例对象 或 组件实例对象。
    注意点:不要在选项 property 或回调上使用箭头函数!

3.2 生命周期钩子

绿色是Vue源码中的函数,红色是hook即生命周期钩子。

疑问待解决:

  1. 为什么在模板里可以直接使用data的属性
  2. 为什么this.xxx可以获取data的属性。。。
  3. 2.3.3组件data只能使用函数涉及组件化,待完善

Vue之MVVM、Vue实例对象、生命周期相关推荐

  1. 计算属性与监听器、Vue 实例的生命周期

    本文是我在学习过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习. 计算属性与监听器.Vue 实例的生命周期 前言 一.计算属性 1.1.计算属性初步理解 1.2.计算 ...

  2. 第五节:轻松掌握 vue 实例的生命周期

    公众号后台收到不少同学催更新,马上来. 上两节我们都是讲vue的实例,简单创建和定义实例的4个常用选项,没看过的伙伴可以先去看上两节,按顺序学习比较容易掌握. 这一节我们学习vue实例的生命周期,没错 ...

  3. vue 请求在子组件加载后了_从零单排vue第九课--Vue实例及生命周期

    前期回顾 上一节课我们重点学习了子组件如何与父组件通信,我们使用$emit方法在子组件中触发一个事件,然后在父组件中接收它.本节课我们来深入了解下vue实例以及它的生命周期是怎么样的? 创建一个Vue ...

  4. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  5. Vue实例的生命周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  6. vue 加载时掉用mounted_Vue实例中生命周期created和mounted的区别详解

    前言 本文主要跟大家介绍了关于Vue实例中生命周期created和mounted区别的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 生命周期先上图 什么是生命周期 Vue ...

  7. java 实例的生命周期_[Java教程]Vue实例生命周期

    [Java教程]Vue实例生命周期 0 2017-08-15 19:00:09 前面的话 Vue实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等.在此过程中,我们可以通过一 ...

  8. vue实例的生命周期详解

    Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期. 官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程.从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这 ...

  9. 7、Vue实例的生命周期钩子(created、mounted、updated、destoryed)

    1.Vue实例 new Vue()创建一个Vue实例 所有的组件其实都是Vue实例 2.Vue实例的生命周期钩子 每个Vue实例在被创建时都要经过一系列的初始化过程 初始化过程 created() 组 ...

  10. vue 声明周期函数_Vue2.0 探索之路——生命周期和钩子函数的一些理解

    前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...

最新文章

  1. WEB前端笔试题(4)
  2. iptables端口转发命令
  3. 面试中 项目遇见的难点答案_2019 百度、头条、小米、360、网易、拼多多等公司 Android 社招面试心得...
  4. Android学习笔记(27):日历视图Calendar
  5. 网络编程-Socket介绍
  6. linux kvm图标需要安装的软件,KVM 图形化安装
  7. 由 Apache 说开,中国开源项目已经走向世界!
  8. (转)关于oracle表空间的规划方法
  9. 软件观念革命:交互设计精髓_交互的学习与应用指南
  10. 用友oracle安装教程,用友NC安装在ORACLE的过程及问题处理
  11. python矢量图_使用python制作矢量图
  12. html5制作表单网页
  13. 华硕笔记本计算机名称,华硕笔记本电脑有哪些型号 华硕笔记本电脑型号大全...
  14. Asus ROG Zephyrus G14 / 幻14 Ubuntu 外接HDMI显示屏检测不到,AMD核显驱动配置,AMD+Nvidia双显卡配置
  15. 测试基础-测试用例编写
  16. illegal offset type php,PHP warning Illegal offset type错误解决办法
  17. Python爬虫爬取某小说网的教程(含全代码)#大佬勿喷
  18. Rust Tokio hyper 协程下载文件工具
  19. Android GPS 简介
  20. html5如何让多张图片重叠,HTML5图片层叠

热门文章

  1. 最新宝可梦回合/口袋Jue醒手游全套源码+Linux服务端
  2. 【Excel VBA】VBE
  3. 涓滴意念--mybatis
  4. openwrt 端口映射
  5. android源码编译失败,编译android源码遇到错误及其解决方法
  6. scrapy打包exe 成功详细教程
  7. 210322验证万能近似定理实验记录
  8. ubuntu上安装spark详细步骤
  9. 计算机硬盘磁盘有什么有害物质,电脑硬盘分区分错了有哪些危害?如何正确分区?千万别弄错了!...
  10. 51单片机与HC-05蓝牙模块连接使用