必备前提
可选前提
前端工程化指的是:在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、
标准化。
企业中的 Vue 项目和 React 项目,都是基于工程化的方式进行开发的。
好处:前端开发自成体系,有一套标准的开发方案和流程。
早期的前端工程化解决方案:
目前主流的前端工程化解决方案:
概念:webpack 是前端项目工程化的具体解决方案。
主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端 JavaScript 的兼容性、性
能优化等强大的功能。
好处:让程序员把工作的重心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。
注意:目前 Vue,React 等前端项目,基本上都是基于 webpack 进行工程化开发的。
① 新建项目空白目录,并运行 npm init –y 命令,初始化包管理配置文件 package.json
② 新建 src 源代码目录
③ 新建 src -> index.html 首页和 src -> index.js 脚本文件
④ 初始化首页基本的结构
⑤ 运行 npm install jquery –S 命令,安装 jQuery
⑥ 通过 ES6 模块化的方式导入 jQuery,实现列表隔行变色效果
在终端运行如下的命令,安装 webpack 相关的两个包:
npm install [email protected] [email protected] -D
① 在项目根目录中,创建名为 webpack.config.js 的 webpack 配置文件,并初始化如下的基本配置:
// 使用Node.js 中的语法,向外导出一个 webpack 对象
module.exports = {
// 代表 webpack 运行模式,可选值有两个 development 和 production
mode: 'development'
}
② 在 package.json 的 scripts 节点下,新增 dev 脚本如下:
"scripts": {
"dev": "webpack"
}
③ 在终端中运行 npm run dev 命令,启动 webpack 进行项目的打包构建
mode 节点的可选值有两个,分别是:
① development
② production
webpack.config.js 是 webpack 的配置文件。webpack 在真正开始打包构建之前,会先读取这个配置文件,
从而基于给定的配置,对项目进行打包。
注意:由于 webpack 是基于 node.js 开发出来的打包工具,因此在它的配置文件中,支持使用 node.js 相关
的语法和模块进行 webpack 的个性化配置。
在 webpack 4.x 和 5.x 的版本中,有如下的默认约定:
① 默认的打包入口文件为 src -> index.js
② 默认的输出文件路径为 dist -> main.js
注意:可以在 webpack.config.js 中修改打包的默认约定
在 webpack.config.js 配置文件中,通过 entry 节点指定打包的入口。通过 output 节点指定打包的出口。
示例代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAueYxA1-1650958920151)(D:\A_study\Vue\study_image\3.3自定义打包的入口与出口.png)]
通过安装和配置第三方的插件,可以拓展 webpack 的能力,从而让 webpack 用起来更方便。最常用的
webpack 插件有如下两个:
① webpack-dev-server
② html-webpack-plugin
webpack-dev-server 可以让 webpack 监听项目源代码的变化,从而进行自动打包构建。
运行如下的命令,即可在项目中安装此插件:
npm install [email protected] -D
① 修改 package.json -> scripts 中的 dev 命令如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRPdDlhJ-1650958920153)(D:\A_study\Vue\study_image\2. 配置webpack-server.png)]
② 再次运行 npm run dev 命令,重新进行项目的打包
③ 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果
注意:webpack-dev-server 会启动一实时打包的 http 服务器,webpack-cli的版本一定要@4.9.0,太低无法运行
① 不配置 webpack-dev-server 的情况下,webpack 打包生成的文件,会存放到实际的物理磁盘上
② 配置了 webpack-dev-server 之后,打包生成的文件存放到了内存中
webpack-dev-server 生成到内存中的文件,默认放到了项目的根目录中,而且是虚拟的、不可见的。
html-webpack-plugin 是 webpack 中的 HTML 插件,可以通过此插件自定制 index.html 页面的内容。
需求:通过 html-webpack-plugin 插件,将 src 目录下的 index.html 首页,复制到项目根目录中一份
运行如下的命令,即可在项目中安装此插件:
npm install [email protected] -D
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0eaucBQ-1650958920153)(D:\A_study\Vue\study_image\3. 配置 html-webpack-plugin.png)]
// 导入html-webpack-plugin插件,得到插件的构造函数
const HtmlPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlPlugin({
// 指定要复制哪个页面
template: './src/index.html',
// 指定赋值出来的文件名和存放路径
filename: './index.html'
})
// 使用Node.js 中的语法,向外导出一个 webpack 对象
module.exports = {
// 插件的数组,将来 webpack 在运行时,会加载并调用这个插件
plugins: [htmlPlugin]
}
① 通过 HTML 插件复制到项目根目录中的 index.html 页面,也被放到了内存中
② HTML 插件在生成的 index.html 页面,自动注入了打包的 bundle.js 文件
在 webpack.config.js 配置文件中,可以通过 devServer 节点对 webpack-dev-server 插件进行更多的配置,
示例代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pw0SqaDz-1650958920154)(D:\A_study\Vue\study_image\4. devServer 节点.png)]
注意:凡是修改了 webpack.config.js 配置文件,或修改了 package.json 配置文件,必须重启实时打包的服
务器,否则最新的配置文件无法生效!
在实际开发过程中,webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块,
webpack 默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!
loader 加载器的作用:协助 webpack 打包处理特定的文件模块。比如:
① 运行 npm i [email protected] [email protected] -D 命令,安装处理 css 文件的 loader
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTA3d7pK-1650958920154)(D:\A_study\Vue\study_image\5. 打包处理 css 文件.png)]
其中,test 表示匹配的文件类型, use 表示对应要调用的 loader
注意:
① 运行 npm i [email protected] [email protected] -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1RKdB2W-1650958920155)(D:\A_study\Vue\study_image\6.打包处理 less 文件.png)]
① 运行 npm i [email protected] [email protected] -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3eWuFW2q-1650958920155)(D:\A_study\Vue\study_image\7.打包处理样式表中与 url 路径相关的文件.png)]
其中 ? 之后的是 loader 的参数项:
webpack 只能打包处理一部分高级的 JavaScript 语法。对于那些 webpack 无法处理的高级 js 语法,需要借
助于 babel-loader 进行打包处理。例如 webpack 无法处理下面的 JavaScript 代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BnF2bO2l-1650958920156)(D:\A_study\Vue\study_image\8.打包处理 js 文件中的高级语法.png)]
运行如下的命令安装对应的依赖包:
npm i [email protected] @babel/[email protected] @babel/[email protected] -D
在 webpack.config.js 的 module -> rules 数组中
在项目根目录下,创建名为 babel.config.js 的配置文件,定义 Babel 的配置项如下:
module.exprots = {
plugins: [['@babel/plugin-proposal-decorators ',{ legacy: true }]]
}
项目开发完成之后,需要使用 webpack 对项目进行打包发布,主要原因有以下两点:
① 开发环境下,打包生成的文件存放于内存中,无法获取到最终打包生成的文件
② 开发环境下,打包生成的文件不会进行代码压缩和性能优化
为了让项目能够在生产环境中高性能的运行,因此需要对项目进行打包发布。
在 package.json 文件的 scripts 节点下,新增 build 命令如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mb3nVJX2-1650958920156)(D:\A_study\Vue\study_image\9.配置 webpack 的打包发布.png)]
–model 是一个参数项,用来指定 webpack 的运行模式。production 代表生产环境,会对打包生成的文件
进行代码压缩和性能优化。
注意:通过 --model 指定的参数项,会覆盖 webpack.config.js 中的 model 选项。
在 webpack.config.js 配置文件的 output 节点中,进行如下的配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgsBivJ9-1650958920157)(D:\A_study\Vue\study_image\10.把 JavaScript 文件统一生成到 js 目录中.png)]
修改 webpack.config.js 中的 url-loader 配置项,新增 outputPath 选项即可指定图片文件的输出路径:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ihzQTxb-1650958920157)(D:\A_study\Vue\study_image\11.把图片文件统一生成到 image 目录中.png)]
为了在每次打包发布时自动清理掉 dist 目录中的旧文件,可以安装并配置 clean-webpack-plugin 插件:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQZgIurQ-1650958920158)(D:\A_study\Vue\study_image\12.自动清理 dist 目录下的旧文件.png)]
Source Map 就是一个信息文件,里面储存着位置信息。也就是说,Source Map 文件中存储着压缩混淆后的
代码,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。
开发环境下默认生成的 Source Map,记录的是生成后的代码的位置。会导致运行时报错的行数与源代码的行
数不一致的问题。示意图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SLqwRswC-1650958920158)(D:\A_study\Vue\study_image\13.默认 Source Map 的问题.png)]
开发环境下,推荐在 webpack.config.js 中添加如下的配置,即可保证运行时报错的行数与源代码的行数
保持一致:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2VsA40rX-1650958920158)(D:\A_study\Vue\study_image\14.解决默认 Source Map 的问题.png)]
在生产环境下,如果省略了 devtool 选项,则最终生成的文件中不包含 Source Map。这能够防止原始代码通
过 Source Map 的形式暴露给别有所图之人。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pc7l6IEq-1650958920159)(D:\A_study\Vue\study_image\15.webpack 生产环境下的 Source Map.png)]
在生产环境下,如果只想定位报错的具体行数,且不想暴露源码。此时可以将 devtool 的值设置为
nosources-source-map。实际效果如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-erMdoouS-1650958920159)(D:\A_study\Vue\study_image\16. 只定位行数不暴露源码.png)]
在生产环境下,如果想在定位报错行数的同时,展示具体报错的源码。此时可以将 devtool 的值设置为
source-map。实际效果如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cy9W01EW-1650958920160)(D:\A_study\Vue\study_image\17.定位行数且暴露源码.png)]
采用此选项后:你应该将你的服务器配置为,不允许普通用户访问 source map 文件!
① 开发环境下:
② 生产环境下:
① 能够掌握 webpack 的基本使用
② 了解常用的 plugin 的基本使用
③ 了解常用的 loader 的基本使用
④ 能够说出 Source Map 的作用
官方给出的概念:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的前端框架。
vue 框架的特性,主要体现在如下两方面:
① 数据驱动视图
② 双向数据绑定
数据驱动视图:
双向数据绑定:
在网页中,form 表单负责采集数据,Ajax 负责提交数据。
在使用了 vue 的页面中,vue 会监听数据的变化,从而自动重新渲染页面的结构。示意图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQI1dtYx-1650958920162)(D:\A_study\Vue\study_image\b1.数据驱动视图.png)]
好处:当页面数据发生变化时,页面会自动重新渲染!
注意:数据驱动视图是单向的数据绑定
在填写表单时,双向数据绑定可以辅助开发者在不操作 DOM 的前提下,自动把用户填写的内容同步到数据源
中。
好处:开发者不再需要手动操作 DOM 元素,来获取表单元素最新的值!
MVVM 是 vue 实现数据驱动视图和双向数据绑定的核心原理。MVVM 指的是 Model、View 和 ViewModel,
它把每个 HTML 页面都拆分成了这三个部分
在 MVVM 概念中:
ViewModel 作为 MVVM 的核心,是它把当前页面的数据源(Model)和页面的结构(View)连接在了一起。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oi1tTj5b-1650958920163)(D:\A_study\Vue\study_image\b2.MVVM 的工作原理.png)]
当数据源发生变化时,会被 ViewModel 监听到,VM 会根据最新的数据源自动更新页面的结构
当表单元素的值发生变化时,也会被 VM 监听到,VM 会把变化过后最新的值自动同步到 Model 数据源中
当前,vue 共有 3 个大版本,其中:
总结:
① 导入 vue.js 的 script 脚本文件
② 在页面中声明一个将要被 vue 所控制的 DOM 区域
③ 创建 vm 实例对象(vue 实例对象)
{{username}}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUuQWw3Y-1650958920163)(D:\A_study\Vue\study_image\b3. 基本代码与 MVVM 的对应关系.png)]
指令(Directives)是 vue 为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构。
vue 中的指令按照不同的用途可以分为如下 6 大类:
① 内容渲染指令
② 属性绑定指令
③ 事件绑定指令
④ 双向绑定指令
⑤ 条件渲染指令
⑥ 列表渲染指令
注意:指令是 vue 开发中最基础、最常用、最简单的知识点。
内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下 3 个:
内容渲染指令
性别
//页面仅显示gender的值,没有'性别'
注意:v-text 指令会覆盖元素内默认的值。
vue 提供的{{ }}
语法,专门用来解决 v-text 会覆盖默认文本内容的问题。这种 {{ }}
语法的专业名称是插值表达式(英文名为:Mustache)
姓名:{{username}}
//姓名:zhangsan
性别:{{gender}}
//性别:女
注意:相对于 v-text 指令来说,插值表达式在开发中更常用一些!因为它不会覆盖元素中默认的文本内容。在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容!
v-text 指令和插值表达式只能渲染纯文本内容。如果要把包含 HTML 标签的字符串渲染为页面的 HTML 元素,
则需要用到 v-html 这个指令:
作用:可以把带有标签的字符串,渲染成真正的 HTML 内容!
尽量在一个大div下,使用
如果el只指定一个p标签,仅选择第一个p标签,其他不会发生变化
属性绑定:用英文 : 来绑定
注意:插值表达式只能用在元素的内容节点中,不能用在元素的属性节点中!
v-bind:
指令,为元素的属性动态绑定值;:
如果需要为元素的属性动态绑定属性值,则需要用到 v-bind 属性绑定指令。用法示例如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cdhcI0FU-1650958920164)(D:\A_study\Vue\study_image\b4.属性绑定指令.png)]
在 vue 提供的模板渲染语法中,除了支持绑定简单的数据值之外,还支持 Javascript 表达式的运算
1 + 2 的结果是: {{1 + 2}} //3
{{tips}} 反转的结果是:{{tips.split('').reverse().join('')}} //名户用入输请
这是一个div//title: box3
注意:在使用 v-bind 属性绑定期间,如果绑定内容需要进行动态拼接,则字符串的外面应该包裹单引号
事件绑定:用@来绑定
vue 提供了 v-on 事件绑定指令,用来辅助程序员为 DOM 元素绑定事件监听。语法格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2VUMbvv-1650958920164)(D:\A_study\Vue\study_image\b5.事件绑定指令.png)]
count 的值是: {{count}}
// methods 的作用,就是定义事件处理函数
methods: {
add: function() {
console.log('ok');
}
}
// 可以简写
methods: {
add() {
console.log('ok');
}
}
在使用 v-on 指令绑定事件时,可以使用 ( ) 进行传参,示例代码如下:
注意
在原生的 DOM 事件绑定中,可以在事件处理函数的形参处,接收事件参数对象 event。同理,在 v-on 指令
(简写为 @ )所绑定的事件处理函数中,同样可以接收到事件参数对象 event,示例代码如下:
methods: {
add(e) {
this.count += 1
if (this.count % 2 == 0) {
// 偶数
e.target.style.backgroundColor = 'red'
} else {
// 奇数
e.target.style.backgroundColor = ''
}
}
}
$event
$event
是 vue 提供的特殊变量,用来表示原生的事件参数对象 event。$event
可以解决事件参数对象 event
被覆盖的问题。示例用法如下
methods: {
add(n, e) {
this.count += n
if (this.count % 2 == 0) {
// 偶数
e.target.style.backgroundColor = 'red'
} else {
// 奇数
e.target.style.backgroundColor = ''
}
}
}
在事件处理函数中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。因此,
vue 提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制。常用的 5 个事件修饰符如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmUt0Nj3-1650958920165)(D:\A_study\Vue\study_image\b6.事件修饰符.png)]
语法格式如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YKb6ZlZW-1650958920166)(D:\A_study\Vue\study_image\b8.事件修饰符语法.png)]
在监听键盘事件时,我们经常需要判断详细的按键。此时,可以为键盘相关的事件添加按键修饰符,例如
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMO60Wyq-1650958920167)(D:\A_study\Vue\study_image\b9.按键修饰符.png)]
methods: {
clearInput(e) {
e.target.value = ''
}
}
v-model
vue 提供了 v-model 双向数据绑定指令,用来辅助开发者在不操作 DOM 的前提下,快速获取表单的数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-InUO6Yrt-1650958920167)(D:\A_study\Vue\study_image\b10.双向绑定指令.png)]
为了方便对用户输入的内容进行处理,vue 为 v-model 指令提供了 3 个修饰符,分别是:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqFMB7VA-1650958920168)(D:\A_study\Vue\study_image\b11.v-model 指令的修饰符.png)]
v-model 指令只能和表单元素使用,因为v-model 底层检测的是value值,且其它标签无法交互
条件渲染指令用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个,分别是:
这是被 v-if 控制的元素
这是被 v-show 控制的元素
实现原理不同:
在实际开发中,绝大多数情况,不用考虑性能问题,直接使用 v-if 就好了!!!
性能消耗不同:
v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此:
v-if 可以单独使用,或配合 v-else 指令一起使用:
注意:v-else 指令必须配合 v-if 指令一起使用,否则它将不会被识别!
v-else-if 指令,顾名思义,充当 v-if 的“else-if 块”,可以连续使用:
优秀
良好
一般
差
注意:v-else-if 指令必须配合 v-if 指令一起使用,否则它将不会被识别!
vue 提供了 v-for 列表渲染指令,用来辅助开发者基于一个数组来循环渲染一个列表结构。v-for 指令需要使
用 item in items 形式的特殊语法,其中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCE2UDoO-1650958920168)(D:\A_study\Vue\study_image\b12.列表渲染指令.png)]
注意:v-for 指令中的 item 项和 index 索引都是形参,可以根据需要进行重命名。例如 (user, i) in userlist
index
{{item.id}}
{{item.name}}
官方对 key 值类型,是有要求的,必须是字符串或者数字型
当列表的数据变化时,默认情况下,vue 会尽可能的复用已存在的 DOM 元素,从而提升渲染的性能。但这种
默认的性能优化策略,会导致有状态的列表无法被正确更新。
为了给 vue 一个提示,以便它能跟踪每个节点的身份,从而在保证有状态的列表被正确更新的前提下,提升渲
染的性能。此时,需要为每项提供一个唯一的 key 属性:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jOhBV1rN-1650958920168)(D:\A_study\Vue\study_image\b13.使用 key 维护列表的状态.png)]
① key 的值只能是字符串或数字类型
② key 的值必须具有唯一性(即:key 的值不能重复)
③ 建议把数据项 id 属性的值作为 key 的值(因为 id 属性的值具有唯一性)
④ 使用 index 的值当作 key 的值没有任何意义(因为 index 的值不具有唯一性)
⑤ 建议使用 v-for 指令时一定要指定 key 的值(既提升性能、又防止列表状态紊乱)
过滤器(Filters)是 vue 为开发者提供的功能,常用于文本的格式化。过滤器可以用在两个地方:插值表达式
和 v-bind 属性绑定
过滤器应该被添加在 JavaScript 表达式的尾部,由“管道符”进行调用,示例代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-idBqgvyC-1650958920169)(D:\A_study\Vue\study_image\b14.过滤器.png)]
在创建 vue 实例期间,可以在 filters 节点中定义过滤器,示例代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFRsdluw-1650958920170)(D:\A_study\Vue\study_image\b15.定义过滤器.png)]
在 filters 节点下定义的过滤器,称为“私有过滤器”,因为它只能在当前 vm 实例所控制的 el 区域内使用。
如果希望在多个 vue 实例之间共享过滤器,则可以按照如下的格式定义全局过滤器:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9GdHFiwt-1650958920170)(D:\A_study\Vue\study_image\b16.全局过滤器.png)]
过滤器可以串联地进行调用,例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKuBrvyt-1650958920171)(D:\A_study\Vue\study_image\b17.连续调用多个过滤器.png)]
过滤器的本质是 JavaScript 函数,因此可以接收参数,格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8LDfRJ4-1650958920171)(D:\A_study\Vue\study_image\b18.过滤器传参.png)]
过滤器仅在 vue 2.x 和 1.x 中受支持,在 vue 3.x 的版本中剔除了过滤器相关的功能。
在企业级项目开发中:
具体的迁移指南,请参考 vue 3.x 的官方文档给出的说明:https://v3.vuejs.org/guide/migration/filters.html#migration-strategy
过滤器的注意点
watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。
语法格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29JcJTQg-1650958920172)(D:\A_study\Vue\study_image\b19.侦听器.png)]
默认情况下,组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使
用 immediate 选项。
watch: {
// 定义对象格式的侦听器
username: {
handler(newVal, oldVal) {
console.log(newVal, oldVal);
},
// 选项的默认值是 false,控制侦听器是否自动触发一次
immediate: true
}
}
如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。此时需要使用 deep 选
项,代码示例如下
watch: {
// 定义对象格式的侦听器
info: {
handler(newVal) {
console.log(newVal.username);
},
// 开启深度监听,只要对象中任意属性变化了,都会出发侦听器
deep: true
}
}
如果只想监听对象中单个属性的变化,则可以按照如下的方式定义 watch 侦听器:
watch: {
'info.username': {
handler(newVal) {
console.log(newVal);
}
}
}
所有计算属性,都放在computed 节点之下,计算属性在定义的时候,要定义成方法格式
计算属性指的是通过一系列运算之后,最终得到一个属性值。
这个动态计算出来的属性值可以被模板结构或 methods 方法使用。示例代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdcTgtys-1650958920172)(D:\A_study\Vue\study_image\b20.计算属性.png)]
特点
好处
axios 是一个专注于网络请求的库!
axios 基础语法
// 调用 axios 方法得到的返回值是 Promise 对象
axios({
methods: 'get',
url: 'http://www.liulongbin.top:3006/api/getbooks',
}).then((books) => {
console.log(books);
})
// 调用 axios 方法得到的返回值是 Promise 对象
axios({
methods: 'get',
url: 'http://www.liulongbin.top:3006/api/getbooks',
// 调用 axios 方法得到的返回值是 Promise 对象
axios({
methods: 'get',
url: 'http://www.liulongbin.top:3006/api/getbooks',
}).then((books) => {
console.log(books);
})
}).then((books) => {
console.log(books);
})
document.querySelector('#btnPost').addEventListener('click', async function() {
// 如果调用某个方法的返回值是Promise实例,则前面可以添加 await
// await 只能用在被 async “修饰” 的方法中
await axios({
methods: 'POST',
url: 'http://www.liulongbin.top:3006/api/post',
// 请求体参数
data: {
address: '北京',
location: '顺义区'
}
}).then((result) => {
console.log(result);
})
})
document.querySelector('#btnPost').addEventListener('click', async function() {
// 解构赋值的时候,使用 : 进行重命名
// 1. 调用axios 之后,使用 async/await 进行简化
// 2. 使用解构赋值,从axios 封装的大对象中,把data 属性解构出来
// 3. 把解构出来的的data属性,使用 冒号 进行重命名
const { data: res } = await axios({
methods: 'get',
url: 'http://www.liulongbin.top:3006/api/getbooks',
// URL中的查询参数
params: {
id: 1
},
// 请求体参数
data: {}
})
console.log(res.data);
})
document.querySelector('#btnGET').addEventListener('click', async function() {
const {
data: result
} = await axios.get('http://www.liulongbin.top:3006/api/getbooks')
console.log(result.data);
})
document.querySelector('#btnPOST').addEventListener('click', async function() {
const {
data: res
} = await axios.post('http://www.liulongbin.top:3006/api/post', {
name: 'zs',
gender: '女'
})
console.log(res);
})
单页面应用程序简称 SPA,顾名思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。
vue 实例的 $mount() 方法,作用和 el 属性 完全一致
vue-cli 是 Vue.js 开发的标准工具。它简化了程序员基于 webpack 创建工程化的 Vue 项目的过程。
引用自 vue-cli 官网上的一句话:程序员可以专注在撰写应用上,而不必花好几天去纠结 webpack 配置的问题。
中文官网:https://cli.vuejs.org/zh/
vue-cli 是 npm 上的一个全局包,使用 npm install 命令,即可方便的把它安装到自己的电脑上:
npm install -g @vue/cli
基于 vue-cli 快速生成工程化的 Vue 项目:vue create 项目的名称
vue cerate 项目的名称
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VCZZuPIX-1650958920174)(D:\A_study\Vue\study_image\b21.vue_create.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LnECWfv8-1650958920174)(D:\A_study\Vue\study_image\b21.vue_create2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LyCsp0RM-1650958920175)(D:\A_study\Vue\study_image\b21.vue_create3.png)]
在工程化的项目中,vue 要做的事情很单纯:通过 main.js 把 App.vue 渲染到 index.html 的指定区域中。
其中:
① App.vue 用来编写待渲染的模板结构
② index.html 中需要预留一个 el 区域
③ main.js 把 App.vue 渲染到了 index.html 所预留的区域中
组件化开发指的是:根据封装的思想,把页面上可重用的 UI 结构封装为组件,从而方便项目的开发和维护。
vue 是一个支持组件化开发的前端框架。
vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件
每个 .vue 组件都由 3 部分构成,分别是:
其中,每个组件中必须包含 template 模板结构,而 script 行为和 style 样式是可选的组成部分
vue 规定:每个组件对应的模板结构,需要定义到
节点中
注意:
vue 规定:开发者可以在 节点中封装组件的 JavaScript 业务逻辑。
vue 规定:组件内的 节点是可选的,开发者可以在
节点中编写样式美化当前组件的 UI 结构。