大前端Vue + Axio
1. 前端知识体系
1.1 前端三要素
- HTML(结构):超文本标记语言,据欸的那个网页的结构和内容。
- CSS(表现):层叠样式表,设定网页的表现样式。
- JavaScript(行为):是一种弱脚本语言,其源代码不需要经过编译,而是由浏览器解释运行,用于控制网页的行为。
1.2 结构层:HTML
标签语言,简单,这里省略。
1.3 表现层 CSS
CSS层叠样式表是一门标记语言,并不是编程语言,因此不可以自定义变量,不可以引用等。
换而言之,CSS不具备任何语法支持,主要缺陷如下:
- 语法不够强大,无法嵌套编写,导致模块化开发中需要编写很多重复的选择器。
- 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护。
CSS预处理器
CSS预处理器定义了一种新的语言,其基本思想是,用一门专门的编程语言,为CSS增加一些编程的特性,将CSS作为目标生成文件。
即,用一种专门的编程语言,进行web页面样式设计,再通过编译器转换为正常的CSS文件,以供项目使用。
常见的CSS预处理器有:
- SASS:基于Ruby,通过服务端的处理,功能强大,解析效率高。
- LESS:基于NodeJs,通过客户端处理,使用简单。功能比SASS简单,但解析效率也低于SASS,但在实际的开发中足够了。
1.4 行为层(JavaScript)
- JavaScrpt作为一种弱类型脚本语言,其源代码在发送给客户端运行之前不需要经过编译,
而是将文本格式的字符代码发送给浏览器由浏览器进行解释运行。 - JS的重要功能:操作浏览器的 DOM 和 BOM 对象。
- JS原生开发现在已经几乎不使用,主要介绍JS框架。
1.5 浏览器的DOM和BOM
参考链接:https://zhuanlan.zhihu.com/p/372357616
1. DOM
(1)什么是DOM
什么是DOM?
1、DOM,文档对象模型(Document Object Model)。
2、DOM是 W3C(万维网联盟)的标准,DOM定义了访问HTML和XML文档的标准。
W3C DOM由以下三部分组成:
核心DOM - 针对任何结构化文档的标准模型
XML DOM - 针对 XML 文档的标准模型
HTML DOM - 针对 HTML 文档的标准模型
简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法使 Web开发人员可以访问HTML元素!
记住,它是一种理念,不是具体方法。
(2)DOM树结构
- DOM模型将整个文档(XML文档和HTML文档)看成一个树形结构,
- 在DOM中,HTML文档的层次结构被表示为一个树形结构。并用document对象表示该文档,树的每个子节点表示HTML文档中的不同内容。
- 每个载入浏览器的 HTML 文档都会成为 Document 对象,Document是探索DOM的入口,利用全局变量document可以访问Document对象
DOM树结构示意图:
![]()
(3)DOM对象
- DOM:文档对象模型(Document Object Model),是W3C定义的一套用于处理HTML和XML文档内容的标准编程接口API。
- javascript实现DOM接口的对象对应的是document对象,JS通过该对象来对HTML/XML文档进行增删改查。
- DOM定义了HTML和XML的逻辑结构,将整个页面划分成由层次节点构成的文档,以树的形式来展现。
- 在BOM和DOM结构层次图中,document对象属于window对象,所以DOM也可以看作是BOM的一部分。
- DOM对象最根本的是document(实际上是window.document)。
2. BOM
(1)什么是BOM
- BOM 是 Browser Object Model,浏览器对象模型。
- DOM 是为了操作文档出现的接口,那 BOM 顾名思义其实就是为了控制浏览器的行为而出现的接口。
(2)BOM的作用
- 浏览器可以做什么呢?比如跳转到另一个页面、前进、后退等等,程序还可能需要获取屏幕的大小之类的参数。
- 所以 BOM 就是为了解决这些事情出现的接口。
(3)BOM对象
- BOM:浏览器对象模型(Brower Object Model),是用于操作浏览器而出现的API,BOM对象则是Javascript对BOM接口的实现。
- BOM提供了独立于内容的、可以与浏览器窗口进行交互的对象结构。通过BOM对象可以访问浏览器功能部件和属性。
- BOM对象由多个对象构成,其中代表浏览器窗口的window对象是Javascript顶层对象,其他BOM对象均为window对象的子对象。被作为window对象的属性来引用。
- 其他BOM对象都是在window对象中进行操作。
- BOM对象 是 各个浏览器厂商根据 DOM在各自浏览器上的实现;[表现为不同浏览器定义有差别,实现方式不同]
- BOM对象最根本的是window。
3. DOM和BOM 重点概要
- DOM 和 BOM 都是从思想中诞生的接口:DOM是为了操作浏览器文档(树结构),BOM是为了控制浏览器行为。
- DOM 和 BOM 对象是JS中对DOM和BOM接口的实现,也就是通过对象定义了具体的方法和属性。
- DOM对象的根本是 Document,BOM对象的根本是Window。
- 二者相关关系图:
![]()
1.6 JavaScript框架(重要)
- JQuery:大家所熟知的JS框架,优点是简化了DOM操作,缺点是DOM操作太过频繁,影响前端性能。
- Angular:Google 收购的前端框架,由一群java程序员开发,其特点是将后台MVC模式搬到了前端,并增加了模块化开发的理念。
- React:由Facebook出品,一款高性能的JS前端框架,特点是推出了新理念:【虚拟DOM】用于减少真实的DOM操作,在内存中模拟DOM操作。有效的提升了前端的渲染效率。缺点是使用复杂,需要额外学习一门【JSX】语言。
Vue:一款渐进式的JavaScript框架,渐进式就算逐步实现新特性的意思,如模块化开发,路由,状态管理等新特性。
其特点是综合了Angular的模块化 和 React的虚拟DOM的优点。Axios:前端通讯框架;因为Vue的边界很明显,就是为了处理DOM(即浏览器页面的树形结构),所以不具备通讯能力。
因此,需要一个额外的通讯框架与服务器交互。这里 vue推荐使用 Axios。当然,也可以选择直接使用JQuery提供的AJAX通讯功能。
1.7 JavaScript构建工具
Babel:JS编译工具,主要用于浏览器不支持的的ES新特性,比如用于编译TypeScript。
WebPack:模块打包器,主要用于打包,压缩,合并,以及按序加载。
1.8 UI设计与UI框架
UI即前端页面视图,以框架为基础进行构建:
- Ant-Design:阿里巴巴出品,基于React的UI框架。
- Element-ui, iview, ice:饿了么出品,基于Vue的UI框架。
- Bootstrap:Twitter出品的前端开发开源工具包。
- AmazeUI:轻量级的HTML5跨前屏框架。
如,可以使用bootstrap可视化布局,创建自己的页面布局。
也可以导入包依赖,整合在框架中使用。
网址:https://www.bootcss.com/p/layoutit/

1.9 前端工程4要素
前端四要素:1.逻辑,2.事件,3.视图,4.通讯
(1)逻辑
通过逻辑判断,页面各个元素的状态。
(2)事件
-浏览器事件:window,document等等。
-Dom事件:crud,修改节点元素等。
-JQuery:封装库
(3)视图
-html:控制网页骨架,对应template
-css:控制网页视图样式,对应style
-js:控制网页动态视图
- 函数:闭包()()
- Dom:
- id, name, tag
- create, remove
- Bom:
- window
- document
(4)通讯
为客户端与服务器的通讯
-Ajax:封装库
-Axios:封装库
2. Vue基础知识介绍
2.1 Vue简介
百度百科
Vue.js是一套构建用户界面的渐进式框架。
与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。
Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。
另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。
另一方面,在与相关工具和支持库一起使用时 Vue.js 也能驱动复杂的单页应用。
2.2 Vue核心思想
- vue综合了模块化开发的思想,借鉴了后端的MVC框架构造。因此,vue体系中也分为View层和Model层。
- vue的核心思想就是不同模块各司其职,再通过统一的配合调度进行工作。
- vue中View层为页面层,专注于页面设计与布置,还有数据展示等。不涉及具体的数据处理部分。
- vue中的Model层为数据处理层,专注于数据的获取与处理,为前端的业务层。这是通过vue对象的属性和方法实现的。
- vue中各模块的协同开发通过view层中的页面元素与model中的vue对象绑定实现。
2.3 第一个Vue程序
-
创建.html文件,编写包含vue的如下内容:
![]()
-
浏览器效果如下所示:
可以看到,通过绑定,view层确实从model层中拿到了数据。
![]()
3. Vue语法
3.1 Vue对象的7大属性
- Vue学习主要有7大属性,8个方法,7个指令,称作787原则。这里我们主要介绍vue对象的7个属性。
- Model层中的数据处理/操作是通过vue对象的属性和方法实现的。
Vue对象的7大属性:
- el属性:
- 用于与页面元素相绑定。
- 原理来说,用来指示vue编译器从什么地方开始解析vue的语法,类似于占位符。
- data属性:
- 用于存放对象的各种数据。
- 用来组织从view中抽象出来的属性,将数据抽象出来存放在data中。
- template属性:
- 用来设置模板,会替换页面元素,包括占位符。
- methods属性
- 放置页面中的业务逻辑,js方法一般都放置在methods中。
- render属性:
- 创建真实Virtual Dom
- computed属性
- 用于计算,并将计算结果视为属性。跟缓存相关
- watch属性
- watch:funtion(new, old){}
- 监听data中数据的变化。
- 两个参数,一个返回新值,一个返回旧值。
3.2 Vue指令
形如:vue-xxx的一般为vue指令。如vue-on,vue-click等。
3.3 元素绑定/双向绑定
(一)简单的元素绑定:
- 元素绑定是vue模式下的核心步骤,通过设置共同的id,将view层与model层进行联系。
- model负责对象的数据读取和处理,view则负责页面设计并拿到数据和展示。
- 视位置的不同,绑定有不同的方式:
(1)id="xxx"
- 通过在view层和model层设置共同的id,将view层的页面元素与model层的vue对象进行绑定。
- 这可以让view层页面元素从vue对象中拿到数据。
- view层中页面元素:
<div id="xxx">,model层vue对象属性:el: "#xxx"
![]()
(2){{}}
{{}}这是vue模式中最常见的绑定,一般用于页面取到后端vue对象中的属性/方法。

(二)双向绑定
- view层的页面元素与model层对象进行双向绑定,实现数据的双向修改。
- 即,数据既可以从vue对象中进行修改,也可以从前端页面元素进行修改。
![]()
![]()
3.4 if与for
(1)if,if-else

(2)for循环拿到数据
- 代码:
![]()
- 前端效果:
![]()
3.5 方法/事件绑定
- 在vue对象的methods中定义(若干)方法,这些方法可以在页面元素中被使用。
![]()
- 页面元素中通过vue指令调用methods中所定义的方法。
可以看到,方法调用成功。
![]()
4. Vue组件
4.1 组件思想介绍
- 这是Vue最核心的思想,即定义大量的组件并将其封装,用于可重复构建的高效开发。
- 在组件构建的过程中,即结合了HTML的template标签对和Vue/JS的对象(包括属性和方法)。
- 每一个组件都已经定义好了功能,包括页面元素构造等。是高度复杂的。
- 组件既可以是下载开源的包(node_module这是主流),也可以是自定义的。
- 组件的调用是通过import相关包实现的,不论这个包是你自己编写并打包的还是直接下载的。
- 将前端代码变成你看不懂的样子,Vue就成功了。背后的原因就是组件的自定义以及封装。
4.2 组件的构建
- vue支持自己定义组件,即将一些自定义内容封装为标签对。
- 后续可以使用标签对,复用这些自定义内容。
- 组件的定义依赖view层和model层的配合,虽然他本身被定义在model层中。
![]()
![]()
5. Axios异步通讯
vue专注于页面的构建,因此将通讯完全由Axios模块实现。
6. Vue-cli脚手架与Vue工程结构
Vue-cli脚手架是一个标准的Vue项目框架,其包含Vue工程基本的项目结构,我们可以以此开始快速构建系统。
7. Router路由
Vue框架内使用 Router路由 机制,控制页面的跳转,包括页面之间的参数传递。
Router的机制分为如下几个步骤:
-
在项目内src文件夹下创建router文件夹,router文件夹内再新建index.js。
- 按照前端默认习惯:各文件夹下的index文件为其核心配置。以此命名可以被vue程序轻松找到。
![]()
-
在router-index中导入路由的两个基础依赖 Vue 和 Router :
- 该依赖需要提前通过 npm下载在node_modules里面。
![]()
-
导入我们编写的页面文件,确定其导入路径并进行命名。(重难点)
import XXX from '../views/YYY'后者为页面文件路径,前者为其名字。- 这里类似于java对象的导入,将页面导入为对象。
![]()
-
通过Vue对象方法使用Router对象:
Vue.use(Router); -
新建路由对象,并将其export(即暴露,让其他程序可以调用其内部信息),再在内部配置页面具体所对应的路径。
path: '/xxxx'为页面对应的访问路径,components: xxx为该页面在被导入时的名字。- 不同页面的路径均定义在(同一个)routes:[{}]中,页面路径定义在{}中,其中用","分割。
![]()
-
在vue项目主程序main.js中使用我们定义的router。(别忘了,vue是一个JS框架,所以主程序自然是main.js)
- 导入定义好的路由文件
import router from "./router";,由于命名规范,故可以简写路径。 - 使用我们定义好的路由对象:
Vue.use(router) - 在全局唯一Vue对象中定义属性 router:
![]()
- 导入定义好的路由文件



















浙公网安备 33010602011771号