使用vue开发项目已经过了一段时间了,对其中的很多东西还是一知半解,于是想要系统学习一下。主要内容是参照官方中文网站https://cn.vuejs.org/v2/guide/,然后加上一些自己的理解与批注。

什么是vue.js

Vue (读音 /vjuː/,类似于view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue也完全能够为复杂的单页应用提供驱动。

上面的这段话引用至官方教程,其中有一些字眼比较难以理解,比如【渐进式框架】,比如【自底向上逐层应用】,还比如【为单页应用提供驱动】。

理解【渐进式框架】

事实上,渐进式(Progressive)这个概念在多个技术领域里都有不同的作用与理解,所以有理解成本也是在意料之中的。渐进式的现实例子有很多,比如网页中图片的加载方式演化就是一个经典的渐进式例子。

在很多年以前,网页中的图片,比如jpeg图片在页面中加载的处理方式,采用的默认处理方式都是从上至下一块一块地加载,直到完全加载。如果网络慢了或者是卡了,那么图片可能就只会加载一半,这时候对图片的整体内容没有一个大致的认知,对用户的整体感官体验就没有那么好了。因此在网页图片的加载方式引入了渐进式的概念,先加载整张图片的主体(模糊),再慢慢从模糊加载到清晰,这样一来用户体验相对来说会好一些。这里我们就可以得出一个初步的结论:渐进式概念指的是优先展示全局整体核心,再从核心上逐步拓展出想要的结果。

看完网页加载的这个例子之后,我们再来看看vue官方教程中的这段话。结合这一段时间的开发经验,我理解的vue中渐进式框架的理念,指的是先看到核心的部分(最小集),然后再在此基础上进行开发者自身的diy拓展(添加组件),这个过程随着开发者的需求逐步变化增长。从另一个角度来看也可以是,当你使用vue的时候,不需要一上来就使用vue的全家桶,而是可以根据场景适当选用方便的框架(官方提供)。形象地理解,渐进式框架就是搭积木,我们可以根据需求,利用社区良好的生态,从基础的底层开始,一步一步地,从下至上地,逐层递进地借助已有的工具和库搭建我们的项目。

说到这里,我们很容易可以总结到,所谓的渐进式框架就是框架分层。在vue中,最核心的是视图层渲染,然后往外是组件机制,再在此基础上加入路由机制(VueRouter),再加上状态控制(Vuex),然后最外层才是构建工具。这样做的好处是我们可以根据不同的需求来选择不同的层级,遵循最小最优最快的开发原则。

理解【为单页应用提供驱动】

因为vue可以只通过引用单个vue.js文件即可使用,可以很方便地与现有的类库或项目进行整合,轻松达到数据驱动页面(双向绑定)的效果,因此这句话的理解是:vue是一个轻量级的框架,简单引入即可使用。

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

和其他第三方库(比如jQuery)一样,只需要通过script标签引入即可使用,这是vue.js最简单的一种安装方式。当然,vue还另外提供了其他安装方式,简直简直了。

vue的安装

Vue不支持IE8及以下版本,因为Vue使用了IE8无法模拟的ECMAScript 5特性。但它支持所有兼容ECMAScript 5的浏览器。

官方教程文档里明确说明了vue是不支持ie8的,关于这一点在实际项目中也有所体会,和客户多次沟通之后客户才同意统一使用谷歌浏览器,因此浏览器兼容性这个因素一定要在选择前端框架的时候考虑进去,否则后期可能会造成不必要的麻烦。在这里,如果你的项目需要兼容ie8的话,vue就不应该在你的考虑范围之内了。

在浏览器上安装Vue Devtools

在使用Vue时,我们推荐在你的浏览器上安装Vue Devtools。它允许你在一个更友好的界面中审查和调试Vue应用。

官方推荐了这一款浏览器插件,同事有给我安装,但是在开发过程中个人用得不多,也不知道用处在哪,大概是我太笨了不会用吧(手动滑稽)。

使用<script>标签引入

使用script标签引入的话,vue就会被注册为一个全局变量,然后就可以通过这个全局变量来使用vue中提供的功能。

要引入的话可以直接从官网下载到本地后引入或直接通过cdn地址引用。其中,开发版本(官网下载)包含完整的警告和调试模式;而生产版本(官网下载)则是删除了警告,最小化了代码体积并经过了gzip压缩。因此这里要注意的是,在开发环境下不要使用压缩版本,不然就会失去了所有常见错误相关的警告。

对于制作原型或学习,开发者可以这样使用最新版本(cdn):

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

而对于生产环境,官方文档推荐链接到一个明确的版本号和构建文件,以避免新版本造成的不可预期的破坏(cdn):

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>

此外,开发者还可以在cdn.jsdelivr.net/npm/vue浏览npm包的源代码。

请确认了解不同构建版本并在你发布的站点中使用生产环境版本,即把vue.js换成vue.min.js。因为这是一个更小的构建,可以带来比开发环境下更快的速度体验。

使用npm安装

在用Vue构建大型应用时推荐使用npm安装,因为npm能很好地和诸如webpack或browserify模块打包器配合使用。同时Vue也提供配套工具来开发单文件组件。

# 最新稳定版
$ npm install vue

对于npm的内容又是一个长时间的学习,如果是新手的话,这里只要知道就好了(俺也一样)。

使用命令行工具(cli)安装

vue提供了一个官方的cli,为单页面应用 (SPA) 快速搭建繁杂的脚手架。它为现代前端工作流提供了batteries-included的构建设置,只需要几分钟的时间就可以运行起来并带有热重载、保存时lint校验,以及生产环境可用的构建版本。

cli工具假定用户对node.js和相关构建工具有一定程度的了解,如果是新手的话,这里只要知道就好了(别问,问就是我不会,我太难了)。

不同构建版本的区别

官方文档这里说了一大堆专业术语,虽然有解释,但是没有一定的基础与了解还是看得一头雾水,因此这里只大概记一下构建版本可以分为三个版本:完整版、包含编译器的版本和运行时的版本。什么UMD、CommonJS和ES Module暂时放到一边去好了,什么CSP环境、Bower和AMD模块加载器也丢到厕所里去,以后再慢慢通过渐进式的学习来弄懂(等等,我真的是做后端的吗???)。

"我还是很喜欢你,像风走了八百里,不问归期。"

vue2.x学习笔记(一)的更多相关文章

  1. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Vue2.0学习笔记一 :各种表达式

    #,过滤器 #,在Vue2.x中,过滤器只能在mustache绑定中使用,为了在指令帮定中实现同样的行为,你应该使用计算属性:     #,过滤器可以串联 {{ message | filterA | ...

  4. vue2.x学习笔记(二十二)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12633051.html. 自定义指令 简介 除了核心功能默认内置的指令([v-mode]和[v-show]等),v ...

  5. vue2.x学习笔记(十九)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12631022.html. 程序化的事件侦听器 在前面的学习中,我们已经知道了[$emit]全局属性的用法,它可以被 ...

  6. vue2.x学习笔记(十七)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12616847.html. 动态组件&异步组件 在前面学习组件基础的时候学习过动态组件,官方文档给出过一个例 ...

  7. vue2.x学习笔记(十六)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12616543.html. 组件中的插槽 在2.6.0的版本中,vue为具名插槽和作用域插槽引入了一个新的统一的语法 ...

  8. vue2.x学习笔记(十五)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12609450.html. 组件的自定义事件 这里来学习一下组件中的自定义事件. 事件名 不同于组件名和prop,事 ...

  9. vue2.x学习笔记(十二)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12592256.html. 组件基础 组件化是vue的一个重要特性,也是vue学习中非常重要的一个知识点. 基础示例 ...

  10. vue2.x学习笔记(十一)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12586416.html. 表单的输入绑定 表单的输入绑定是一块很重要的内容,因为所有的业务系统都离不开基础表单的录 ...

随机推荐

  1. 【bug】table重新加载数据,页面滚动条下沉到底部,记录scrollTop后将其恢复scrollTop出现闪烁

    1.table数据请求前记录scrollTop $scope.scrollPos = document.documentElement.scrollTop; 2.html中添加指令repeat-fin ...

  2. JSP+Servlet+C3P0+Mysql实现的azhuo商城

    项目简介 项目来源于:https://gitee.com/xuyizhuo/shopping 原仓库中缺失jar包及sql文件异常,现将修改过的源码上传到百度网盘上. 链接:https://pan.b ...

  3. varchar int 查询 到底什么情况下走索引?

    一个字符类型的.一个int类型的,查询的时候到底会不会走索引,其实很多工作了几年的开发人员有时也会晕,下面就用具体事例来测试一下. 1.  准备工作 先准备2张表,以备后续测试使用. 表1:创建表te ...

  4. Spring Framework之IoC容器

    Spring IoC 概述 问题 1.什么是依赖倒置? 2.什么是控制反转? 3.什么是依赖注入? 4.它们之间的关系是怎样的? 5.优点有哪些? 依赖倒置原则 (Dependency Inversi ...

  5. 第 k 小的数

    一.寻找两个有序数组的中位数 1.1 问题描述 给定两个大小为 m 和 n 的不同时为空的有序数组 nums1 和 nums2.找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m ...

  6. sql select sql查询

    select 一.课上练习代码 1 查询所有学生信息 select * from tb_student; select * from tb_teacher; 2 查询所有课程名称及学分(投影和别名) ...

  7. Netty为什么不直接用AtomicXXX,而要用AtomicXXXFieldUpdater去更新变量呢?

    更多技术分享可关注我 前言 如果仔细阅读过Netty的线程调度模型的源码,或者NIO线程对象及其线程池的创建源码,那么肯定会遇到类似“AtomicIntegerFieldUpdater”的身影,不禁想 ...

  8. Java并发基础05. 传统线程同步通信技术

    先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次--如此往返执行50次. 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首 ...

  9. SpringBoot系列之学习教程汇总

    对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 一.配置篇 SpringBoot系列之@PropertySource读取yaml文件     >> source down ...

  10. 测试Activity和Fragment的生命周期

    Activity的生命周期有7个函数,Fragment的生命周期有11个函数. Activity生命周期除上述6个方法还有一个Restart()方法,该方法在该Activity从不可见(仍存在)到重新 ...