vant
安装:
Vue 3 项目,安装最新版 Vant——npm i vant
Vue 2 项目,安装 Vant 2——npm i vant@latest-v2
一、ES6模块化&异步编程高级用法
1.ES6模块化
(1) 目的实现模块化统一规范。ES6是浏览器端和服务器端通用的模块化开发规范
编辑
(2)在node.js种体验ES6模块化
编辑
(3)基本语法
编辑
①默认导出——export default
export default { n1 }
默认导入——import from
//从01.js模块当中导入export default向外共享的成员
import m1 from './01.js'
注意:每个模块当中只允许使用一次export default,否则会报错
默认导入时的接收名称可以任意,只要时合法就行
②按需导出——export
export let s1 = '111'
export function say(){}
按需导入——import{ }from '模块标识符'
import{ s1,s2 } from './01.js'
注意:注意区别默认和按需的区别!!!!!
编辑
说明:as重命名例如:import { s1 as s},这就可以重命名了
③直接导入并执行模块中的代码——import '模块路径'
//例如当前文件模块是05.js,此时我们不许哟啊得到模块向外共享的成员
import './05.js'
2.Promise
为了解决回调地狱的问题
(1)回调地狱
多层回调函数的相互嵌套,就形成了回调地狱
缺点:代码耦合性太强,牵一发而动全身,难以维护;大量冗余的代码相互嵌套,可读性变差
(2)Promise
编辑
(3)基于回调函数顺序读取文件内容
编辑
②then-fs的基本使用
编辑
③then()方法的特性—— 返回一个新的Promise实例对象, 例:
编辑
④通过.catch捕获错误——Promise.prototype.catch方法
//例如:
then.readFile('./01.txt','utf8').catch(err=>{ console.log(err.message)}
说明:当出现错误之后,会找到catch报错,由于从上往下执行,所以报错中间的就不会执行。但是catch后面的代码可以继续执行
⑤Promise.all()方法
编辑
⑥Promise.race()方法
只要任何一个异步操作完成,就立即执行下一步的.then操作编辑
注意:不一定能够是按顺序输出的,也就是说,是看谁执行的快,结果不一定每一次都是1.text的内容
(3)基于Promise封装读文件的方法
编辑
①getFile方法的基本定义
编辑
编辑
②获取.then的两个形参
编辑
调用resolve和reject回调函数
//接上图代码
getFile('./files/1.txt').then((r1)=>{console.log(r1),(err)=>{console.log(err.message)}}
//说明:我们使用定义的getFile方法,返回的是一个Promise实例,所以我们可以.then,r1表示成功,则打印成功结果,err表示失败,则打印失败结果
3.async/await
目的:简化Promise异步操作
编辑
此时,加上了await,r1,r2,r3不再是一个Promise对象,而是文件里面真正的内容。并且注意,如果使用了await,就要加上async
注意事项:
编辑
4.EventLoop
(1)同步任务异步任务
编辑
(2)同步任务和异步任务执行过程
编辑
(3)EventLoop(事件循环)概念
如上图,JavaScript主线程从“任务队列”中读取异步任务的会带哦函数,放到执行栈中依次执行。这个过程不断循环,整个运行机制又称为EventLoop.
5.宏任务和微任务
(1)异步任务又被分为宏任务和微任务
编辑
(2)宏任务和微任务的执行顺序
编辑
二、vue3
1.vue简介
编辑
(2)2、3版本对比
编辑
(3)调试工具
编辑
2.单页面应用程序(SPA)
编辑
编辑
编辑
可以通过下面的方法进行解决
(3)两种快速创建工程化SPA项目的方式

编辑
3.vite的基本使用
(1)创建vite的项目
编辑
(2)梳理项目结构
编辑
(3)vite项目的运行流程
编辑
编辑
4.组件化开发
是指根据封装的思想把页面上可重复使用的部分封装为组件。
好处:提高了前端代码的复用性和灵活性;提高了开发效率和后期的可维护性
(1)组件的template节点
编辑
编辑
就是我们不需要有一个大的根节点,去包裹内容了
(2)script中的节点
①name——自定义的组件名称可以清晰地区分每个组件
②data——vue组件渲染期间需要用到的数据,可以定义再data节点当中。data方法中return出去的对象,就是当前组件渲染期间所需要用的数据对象
export default{date() {return {username:'ahhahah',}},}
③methods——组件中的事件处理函数,必须定义到methods节点中
export default{methods:{addCount(){this.count++},},}
(3)style节点
让style支持less语法
编辑
(4)注册全局组件
编辑
②组件注册时名称的大小写
编辑
③:deep()样式穿透(在vue2里面是/deepl/)
编辑
:deep(.title){ }//括号里是我们的选择器
(5)绑定html的css
①以数组绑定
编辑
说明:这里代码的意思是,判断是否isitalic,如果是那么class就变成italic,字体就会变倾斜,如果不是就会为空。按钮点击之后会取反isitalic的值,从而达到改变效果的样子
②以对象绑定
也就是相当于把原来数组里面一个一个的,放到一整个对象当中去
class="对象名称"
对象名称:{这里面就是各个类名}
以对象格式,class与style绑定

编辑
5.props验证
(1)什么是
是指对封装组件时对外界传递过来的props数据进行合法性校验,从而防止数据不合法。
使用数组类型的props节点缺点:无法为每个prop指定具体的数据类型
编辑
(2)对象类型的props节点
使用此类型,可以对每个prop进行数据校验
编辑
(3)多个可能的类型(就是某个个prop的数据类型不唯一)
编辑
(4)必填项
编辑
(5)自定义验证函数
编辑
indexof函数: indexof() 方法用于查找元素在数组中第一次出现时的索引,如果没有,则返回-1。
6.计算属性
计算属性会缓存计算的结果,方法不会。只有计算属性的依赖项发生变化时,才会重新计算。
例如:一直计算的是count,结果只显示,计算属性被执行一次,三次的结果都是2,不会用第一步的结果继续计算得到4.
编辑
7.自定义事件
(1)
在封装组件时,为了让组件的使用者可以监听到组件内状态的变化,此时就需要用到组件的自定义事件
(2)使用步骤
封装组件:
①声明自定义事件——必须在emits节点中声明
编辑
②触发自定义事件——this.$emit('自定义事件的方法')
编辑
使用组件:
③监听自定义事件——v-on
编辑
(3)自定义事件传参
调用this.$emit()方法触发自定义事件时,可以通过第二个参数为自定义事件传参
8.组件上之间的数据共享
(1)后代关系组件之间的数据共享
是指父节点向其子孙组件共享数据,利用provide和inject实现
①父节点通过provide共享数据
编辑
②子孙节点通过inject接收数据
编辑
(3)父级节点向外共享响应式
编辑
(4)vuex
是终极的组件之间的数据共享方案。适合大范围的频繁地共享数据
编辑
9.vue3全局配置axios
编辑
编辑
三、组件库
1.vue组件库
(1) 在实际开发中,前端开发者可以把自己封装的.vue组件整理、打包、并发布为npm包
编辑
(2)vue组件和bootstrap的区别
编辑
(3)常用vue组件库
编辑
(4)Element UI
编辑
①安装:在vue2的项目中安装Element-ui——终端输入:npm i element-ui -S
②引入:
a.完整引入
编辑
b.按需引入
编辑
编辑
编辑
(5)把组件导入和注册封装为独立的模块
编辑
四、axios拦截器
1.拦截器
每次发起ajax请求和得到响应的时候自动被触发
编辑
2.配置请求拦截器
编辑
3.配置响应拦截器
编辑
五、proxy跨域代理
1.通过代理解决接口跨域问题
编辑
2.在项目中配置proxy代理
编辑
编辑
注意:devServer.proxy提供的代理功能,仅在开发调试阶段生效;项目上线时,依旧需要API
接口服务器开启CORS跨域资源共享
8.11-8.12学习汇报与总结
1.问题解决
(1)vue-router安装报错
编辑
解决:版本兼容性问题,vue版本才2.6.14,而下载的vue-router为4.1.3版本过高,所以选择安装一个低版本的vue-router
(2)问题:运行资料里面的代码显示报错显示:vue-cli-service' 不是内部或外部命令,也不是可运行的程序
解决:原因是由于在该代码中含有node_module依赖包,再拷贝到其他计算机时,项目路径发生变化,导致找不到vue-cli-service于是报错。所以重新下载npm i,然后再次运行,问题解决
参考:原文章
(3)问题:在拿到的现成现成代码中,想要重新npm i 然后报错
编辑
解决:清空缓存,输入npm cache clear --force,之后再次npm i 正常运行
(4)问题:导入vant组件库之后,运行代码报错
编辑
解决:app——App,名称写错
(5)问题:导入vant库组件之后,运行代码报错:Uncaught TypeError: (0,vue__WEBPACK_IMPORTED_MODULE_2__.createApp) is not a function
编辑
解决:大致搜索一下是版本问题,但是把版本都改低了之后,还是报错。最后,居然发现我安装的是vant2,但是我配置的是vant3,所以报错。最后按照官网vant2配置,运行正常。
(6)问题:通过路由展示对应的tabbar页面报错
编辑
解决:没有在main.js导入index.js.。导入后即可解决
import router from './router/index.js'
new Vue({
render: h => h(App),
router ,
}).$mount('#app')