Vue学习笔记

12/20/2021 Vue

# 前端开发工程化

模块化(JS 的模块化、CSS 的模块化、资源的模块化)

组件化(复用现有的 ui 结构、样式、行为)

规范化(目录结构的划分、编码规范化、接口规范化、文档规范化、Git 分支管理)

自动化(自动化构建、自动部署、自动化测试)

# webpack

webpack 是前端项目工程化的具体解决方案

主要功能:提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端 JS 的兼容性、性能优化等强大功能

# loader 加载器

协助 webpack 打包处理待定的文件模块

# base64 图片解码

可以防止不必要的请求,性能优化的手段

缺点:解码后体积变大

# source Map

储存位置信息,开发调试阶段查错比较方便

`devtool:eval-source-map`

发布阶段不定位错误代码位置,出于安全考虑

实际发布阶段 devtool 的值设置为 `nosources-source-map`

# Vue.js

vue 是一套用于构建用户界面的前端框架,框架是一套现成的解决方案,程序员只能遵守框架的规范,编写自己的业务功能

- Vue 的指令、组件(对 UI 结构的复用)、路由、Vuex、Vue 组件库
- 学习框架的规范语法

# Vue 的特性

# 1.数据驱动视图

- 数据的变化会驱动视图自动更新
- 好处:程序员只需要把数据维护好,那么页面结构会被 vue 自动渲染出来

# 2.双向数据绑定

在网页中,form 表单负责采集数据,Ajax 负责提交数据

- js 的数据变化,会被自动渲染到页面上
- 页面上表单采集的数据发生变化的时候,会被 vue 监听到,自动更新到 js 数据中

# MVVM

MVVM 是 vue 实现数据驱动视图和双向数据绑定的核心原理。MVVM 指的是 Model、View 和 ViewModel

Model 指的是页面渲染时所依赖的数据源

View 指的是页面所渲染的 DOM 结构

ViewModel 指的是 vue 的实例,他是 MVVM 的核心

# Vue 的基础用法

指令是 vue 为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

1、内容渲染

2、属性绑定

3、事件绑定

4、双向绑定

5、条件渲染

6、列表渲染

# 内容渲染

- #### v-txet

  1、缺点:会覆盖元素内部原有的内容

  2、插值表达式 {{}} 在实际开发中用的更多

  3、v-text 和插值表达式只能渲染纯文本内容

- #### v-html

  把带有标签的字符串,渲染成 HTML 内容

# 属性绑定

注意:插值表达式只能用在内容节点中,不能用于属性节点上

- v-bind: 为元素的属性动态绑定数值
- 简写是 `:`

# 事件绑定

- `v-on:` 绑定事件,同时可以加()传递参数

- 简写是 `@`

- `$event` 的应用场景:如果默认的事件对象 e 被覆盖了,则可以手动传递一个$event

- 事件修饰符 .stop 阻止冒泡 .prevent 阻止标签默认行为

# 双向绑定指令

- #### v-model 指令

- #### v-model 修饰符

  - .trim 去除表单字符串里的空格
  - .number 转换为数字类型
  - .lazy 取消实时同步 输入完毕失去焦点后再同步

# 条件渲染指令

- v - if 动态创建或删除元素,实现元素的显示和隐藏
  - 如果刚进入页面的时候,某些元素默认不需要被显示,而且后期这个元素也可能不需要被展示出来,此时 v - if 性能更好
- v - show 动态为元素添加或移除样式`display:none;`
  - 如果要频繁的切换元素的显示状态,用 v - show 性能更好

# 列表渲染指令

v-for 指令,用来辅助开发者基于一个数组来循环渲染一个列表结构

# 过滤器(vue2)

fliters 常用于文本的格式化 可以用在插值表达式和 V-bind 属性绑定

用管道符 `|` 表示

- #### 私有过滤器 fliters

- #### 全局过滤器 fliter

  全局过滤器 Vue.filter () 方法接受两个参数: 
  
  1、第一个参数是全局过滤器的名字

  2、第二个参数是全局过滤器的处理函数

# 过滤器需要注意的地方

1. 要定义到 filters 节点下,本质上是一个函数
2. 在过滤器函数中, 一定要有返回值 return
3. 在过滤器的形参中,可以获取到管道符前面待处理的数值
4. 如果全局过滤器和私有过滤器名字一致,此时按照就近原则,调用的是私有过滤器

# 侦听器 watch

侦听器的作用是监听数据的变化,从而针对数据的变化做特定的操作

watch( newVal,oldVal ){ }

通常用来配合 Ajax 发送请求判断表单数据是否重复 (用户名是否被占用)

1. 方法格式的侦听器

  - 缺点 1:无法在刚进入页面的时候,自动触发!!
  - 缺点 2:如果侦听的是一个对象,如果对象中的属性发生了变化,不会触发侦听器

2. 对象格式的侦听器

  - 好处 1:可以通过 immediate 选项,让侦听器自动触发
  - 好处 2:可以通过 deep 属性,让侦听器实现深度侦听(deep 属性默认关闭)
    - 监听子元素的变化,命名要加单引号 ' '

# 计算属性

特点:

1. 定义的时候,要被定义成方法
2. 在使用计算属性的时候,当普通的属性使用即可

好处

1. 实现了代码复用

2. 只要计算属性中依赖的数据源发生变化,计算属性会自动重新求职

# axios

axios 是一个专注于网络请求的库

axios 的基本语法

```
const res = axios({
  method:'get',
  url:"http:/www.baidu.com"
})
result.then(function(books){
  console.log(books.data)
})
```

axios 在请求到数据之后,在真正的数据之外套了一层壳

axios 的返回值是一个 promise,因此可以使用 async 和 await 修饰

axios 也可以用 get() post() 等 ajax 的方法

# vue-cli

vue-cli 是 vue.js 开发的标准工具,简化了基于 webpack 创建工程化的步骤

```
vue create 项目名称
```

# vue 项目中 src 目录的构成

assets 文件夹:存放项目中用到的静态资源文件,例如css样式表、图片资源等
components 文件夹:程序员封装的,可复用的组件,都要放到 components 目录下
main.js 是项目的入口文件,整个项目的运行,要先执行 main.js

# vue 项目的运行流程

在工程化的项目中,vue 要做的事情很单纯:通过 main.js 把 App.vue 渲染到 index.html 的指定区域中

1. App.vue 用来编写待渲染的模块结构
2. index.html 中需要预留一个 el 区域
3. main.js 把 App.vue 渲染到了 index.html 所预留的区域中

# vue 中的组件化开发

  • # template 组件的模块结构
  • # script 组建的 JavaScript 行为
  • # style 组件的样式

# Vue 组件中的父子关系

# 使用组件的三个步骤

  1. # 使用 import 语法导入组件
  2. # 使用 components 节点注册组件
  3. # 以标签形式使用刚才注册的组件

# 通过 components 注册的是私有子组件

# 注册全局组件

在 vue 项目的 main.js 入口文件中,通过 Vue.components() 方法,可以注册全局组件

# 组件的 props 属性

props 是组件的自定义属性,在封装通用组件的时候,合理地使用 props 可以极大地提高组件的复用性

props:['init']
// 自定义属性的名字,是封装者自定义的,名称合法即可
1
2

props 中的数据,可以直接在模板结构中被使用

props 是只读的,vue 规定:组件中封装的自定义属性是只读的,程序员不能直接修改 props 的数值,否则会直接报错

# props 的 default 默认值

在声明自定义属性的时候,通过 default 声明默认值

# props 的 type 值类型

在声明自定义属性的时候,通过 type 来定义属性的值类型

# props 的 required 必填项

# vue 组件之间的样式冲突

默认的 .vue 样式是全局生效的 因此需要添加 scoped 到样式属性中

/deep/ 可以从父组件中修改子组件的样式

# 生命周期

# 组件之间的传值(数据共享)

# 父子组件

  1. # 父向子传值,使用 props
  2. # 子向父传值,使用自定义事件传递

# 兄弟组件之间的传值

  1. EventBus

# 动态组件

component 标签是 vue 内置的,作用是:组件的占位符

keep-alive 标签 可以把内部的组件进行缓存,而不是销毁组件

# 插槽

插槽是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。

# 路由

路由 router 就是对应关系

# 前端路由

Hash 地址与组件之间的对应关系

# 前端路由工作方式

  1. 用户点击了页面上的路由连接
  2. 导致了 URL 地址栏的 Hash 值发生变化
  3. 前端路由监听到了 Hash 地址的变化
  4. 前端路由把当前 Hash 地址对应的组件渲染到浏览器中

# 路由重定向

用户在访问地址 A 的时候,强制用户跳转到 C 地址,从而展示特定的组件页面,通过路由规则的 redircet 属性,指定一个新的路由地址,可以很方便地设置路由的重定向

# 嵌套路由

# 子级路由
  1. 默认子路由
  2. 路由规则
  3. 路由重定向

# 动态路由

把 hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性

在 vue-router 中使用英文的冒号 :来定义路由的参数项。

# 路由导航

# 声明式导航(点击链接)
  • 普通网页中点击 a 标签
  • vue 项目中点击 <router-link> 标签
# 编程式导航(调用 API)
  • 普通网页调用 location.href 跳转到新页面的方式
  • vue 项目中的一些 API
Last Updated: 5/18/2022, 9:30:26 AM