摘要:h5就是html的第五个版本规则,添加了一些新的特性 ; 语义化标签,自定义属性,音视频标签,本地存储 等 ; 自定义属性 -- data-id 可以获取到此标签 ,数据的存放 和 获取 ; 语义化标签 -- header,nav,footer ,aside, article, section ;
阅读全文
摘要:1.说一下vue的父子组件传参 使用i自定义属性和自定义事件传参 使用ref属性传参 vuex 传参 2.说一下vue2和vue3的区别 template 是多个根标签 因为fragment组件 组合式 API setup 换成了 选择式Api data methods 等 vue3使用 proxy
阅读全文
摘要:不会,因为对象是复杂类型数据 ;对象的地址保存在栈内存中,对象的数据保存在堆内存中 ; 只要对象的地址不发生改变,无论堆内存的对象数据如何改变,对象的值就不会改变 ;
阅读全文
摘要:https://blog.csdn.net/weixin_46074961/article/details/122415014
阅读全文
摘要:书写形式不同,箭头函数的定义方式更加简单 ; this指向不同 箭头函数使用父级作用域的this 普通函数执行 window 箭头函数不能使用 new 生成实例对象 ; 普通函数的参数是arguments,而箭头函数的的是args
阅读全文
摘要:递归就是自己调用自己,条件一定不能相同,否则容易造成死循环 ; 优点:代码简单,容易理解 ; 缺点:时间和空间的消耗大 ; 终止递归的条件: 1. 当递归的执行次数到达一定的限定值 2. 当递归的结果达到目标值
阅读全文
摘要:vue提供组件插槽能力, 允许开发者在封装组件时,把不确定的部分定义为插槽 ; 作用:再不确定的内容位置占位,在子组件内使用 slot 标签写占位的内容 ; 插槽的分类 : 默认插槽: 具名插槽:使用 name 属性把template 和 slot 标签建立关联 ; 作用域插槽:子组件使用自定义属性
阅读全文
摘要:// // 执行多个并行任务 const promiseAll = [ thenFs.readFile('./files/1.txt','utf8'), thenFs.readFile('./files/2.txt','utf8'), thenFs.readFile('./files/3.txt',
阅读全文
摘要:cancat 用来链接 2 个数组,不会改变原数组 ;
阅读全文
摘要:map是处理数据的方法,不会改变原数组,会返回一个新数组 ; filter 也不会改变原数组,会返回新数组 ; forEach 也不会改变原数组,不会返回新数组 ; reduce不会改变原数组 ; 是否改变数组的说明: https://blog.csdn.net/qq879222800/articl
阅读全文
摘要:1. splice 个数 开始删除位置索引 后面的数组元素会自动替补 2. delete关键字 删除的当前位置是空值,后面的元素不会填补 ;
阅读全文
摘要:1. 使用 instanceof instanceof的作用就是判断该对象是谁的实例,我们也就知道了instanceof是对象运算符。 2. 静态方法 Array.isArray 方法 ; ps:使用 typeof 只能判断数组是一个对象 ,function 也是一个对象 ;
阅读全文
摘要:1. 清除用户数据,直接跳转登录页重新登录 ; 2. 短token 过期,使用 长 token 重新获取短 token ,然后重新请求 ; 如果长 token 也过期了,就去重新登录获取 token ;
阅读全文
摘要:请求拦截器统一添加 token ,也可以手动的判断token是否过期 ; 响应拦截器判断返回数据的逻辑处理,被动的判断token过期并处理 ;
阅读全文
摘要:单独新建一个 permission.js 文件用来做用户权限操作: 设计动态路由的时候,name属性要和用户的标识符一一对应 ,然后filter筛选 动态路由规则,如果 用户的权限标识包含includes 动态路由的name属性就返回 true ; actions: { // 用来整理出属于当前用户
阅读全文
摘要:现在的权限管理都是基于RBAC实现的,添加了角色这一中间层; 具体操作: 1. 在本地实例化路由实例的时候,只要把静态路由规则注入到实例里,动态路由规则定义好,但是现在不注入 ; 2. 在路由导航守卫登录时,根据用户的权限标识,筛选出只有当前用户才可以访问的动态路由规则,然后使用addRoutes
阅读全文
摘要:console.log() 打印数据,看一下数据是否改变,切换到 vue.js.develops 插件修改数据,看一下视图是否有变化 ; 如果没有变化,可能是vue的视图没有监听的数据的改变,数据可能不是响应式数据 ; 使用索引操作数组是没有响应式的 ,用 数组方法pop ,push 等方法尝试,追
阅读全文
摘要:由于vue3使用proxy,对于对象和数组都不能直接整个赋值。 直接赋值丢失了响应性 只有push或者根据索引遍历赋值才可以保留reactive数组的响应性 ; 可以使用 toRefs 解决这个问题 ;或者使用: const state = reactive({ arr: [] }); 解决 ;
阅读全文
摘要:vue3 使用了组合式API,setup 替换了选项式api ,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码 ; vue3使用proxy替代了Object.defineProperty 实现数据的响应式 ,大大提高了性能 ;ps:创建框架,开启项目的速度变快了 ;
阅读全文
摘要:<!-- 表单验证三要素: --> <!-- ① el-form需要有 model属性【表单数据对象】、rules属性【验证规则对象】、ref属性【引用字符串】 --> <!-- ② el-form-item需要有 prop属性【校验的字段名】 --> <!-- ③ el-input 等控件 要有
阅读全文
摘要:虽然CDN引入组件库可以优化项目,减轻服务器负载,但是在真实的项目开发中不推荐使用CDN ; 因为: 1. 使用第三方服务器不稳定 2. 需要后端配置 3. 要知道组件库的全局变量名
阅读全文
摘要:与 post 相比 get请求 更简单也更快 ; get 请求的数据会暴漏在地址栏中,post 请求不会,所以post 请求比get请求要安全一些 ;
阅读全文
摘要:null 是空指针,用来保存准备使用的对象,但是现在还没有,用来占位 ; undefined 是未定义,是声明了变量但是没有初始化 ;
阅读全文
摘要:https://blog.csdn.net/weixin_43359799/article/details/123137288
阅读全文
摘要:首先,ref和reactive 定义响应式数据的,& vue3中的数据分为 2 类,一类没有响应式数据 第二类是响应式数据 ; 如果没有使用ref 或者 reactive 定义数据,那么默认是第一类没有响应式数据的 ; 区别: ref 定义基本数据和数组的 ; reactive 定义对象的 ;
阅读全文
摘要:1. nextTick 使用场景:通过异步渲染的页面解构不能直接dom操作,要使用 nextTick (延迟回调)等待一下 ;nextTick 的作用:感知dom的更新完成,类似于 updated ; 2. set 用来追加响应式数据的 3. filter 定义过滤器的 4. directive 定
阅读全文
摘要:api是应用程序编程接口 ; 举个例子:客户端发送异步请求到服务器请求数据,无论是客户端请求数据还是服务端响应数据,都要通过接口地址来通知,通信的时候使用了协议规定传递数据使用 JSON或者XML ; 接口和协议组合在一起就是API ;
阅读全文
摘要:递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return;返回终止递归。 终止的条件: 1、判断递归的次数是否达到某一限定值 2、判断运算的结果是否达到某个目标
阅读全文
摘要:所谓的映射机制就是 页面的标签和js中获取的页面标签对象,无论修改哪一个,另一个都会随之更新 ; 映射原理:浏览器在渲染页面的时候给每一个元素都设置了很多内置的属性(包含样式的), 当我们在JS中把堆内存中的某一个内置属性的值修改了,大部分情况下,浏览器都会监听到你的修改, 然后按照最新修改的值重新
阅读全文
摘要:处理数据,常常使用 解构 数组的方法实现加工数据
阅读全文
摘要:节流的使用场景:登录按钮 防抖的使用场景:搜索框搜索
阅读全文
摘要:闭包就是可以访问其它函数内部变量的函数 ; 闭包可以延长变量的作用域范围和生命周期,可以操作函数内部的变量 ;闭包容易造成内存泄漏,解决办法:不在使用的变量手动释放 ;
阅读全文
摘要:1. 创建 2 个函数 A 和 B 2. 创建一个A的实例对象,并将该实例对象赋值给B.prototype ,即B的原型上包含A函数内部的属性和方法 ; 3. 然后创建B的实例对象也拥有函数A内部的所有属性和方法 ;
阅读全文
摘要:function 声明函数的优先级更高 ; 因为 function声明函数的时候,是在代码解析之前赋值给变量,此时就已经可以调用了 ; 但是var 声明的函数,要在代码运行阶段才会赋值给变量,这个时候才能调用函数 ;
阅读全文
摘要:promsie是es6新增的特性,用来解决回调地狱的问题(异步深层嵌套问题) ; 也叫做期约函数,是js内部的构造函数 ,可以当作一个容器,里面保存着某个未来才会结束的事件,比如异步请求 ;
阅读全文
摘要:图片懒加载体现在页面不展示图片的时候,img不会发送http请求获取src资源 ,等到需要展示图片大的时候才会发送http请求src资源展示,这样优化了用户体验 ; 具体实现是给不需要展示的图片的img设置自定义属性替换src 属性,没有 src 属性就不会发送http请求了 ,等到时机成熟,把自定
阅读全文
摘要:1. let 和 ocnst ,可以定义块级作用域 2. 新增了箭头函数,箭头函数简化了函数定义的定义 3.新增了promise解决回调地狱问题 ps:回调地狱是我们异步请求服务器数据时,通过then 多次返送请求,形成的回调地狱 ; 4. 新增了import 和 export 模块导入导出规范,让
阅读全文
摘要:1. 使用原型链继承 2. 通过构造函数继承 通过构造函数,创建的实例,可以访问构造函数的属性和方法,以及可以访问构造函数的原型对象 prototype 上的数据和方法 ; 3. 组合继承(1 和 2 的组合继承) 4. class 类继承
阅读全文
摘要:定义函数的方式: 1. 函数表达式定义函数 function expression 2. 函数式声明 function declaration 区别: var声明的函数,只能在声明之后调用,因为函数表达式在函数执行阶段才会赋值给函数名 ; function声明的函数可以在声明之前调用,因为函数表达式
阅读全文
摘要:钩子函数就是路由导航守卫 ; 有 7 个守卫,分为 3 类 ; 全局守卫:在全部的组件生效; beforeEach 全局前置守卫 afterEach 全局后置守卫 解析守卫 组件守卫:在某个组件生效 ; beforeRouterEnter:在组件创建之前,即create函数执行之前 ; 我忘记了 路
阅读全文
摘要:使用过,vuex是状态管理工具,它的数据可以被所有的组件获取,方法可以被所有的组件调用 ; vuex 的内部的运行机制:state提供了数据驱动视图,dispath派发actions 执行异步操作,commit提交mutations 修改state 数据 ; vuex的核心属性: state:数据保
阅读全文
摘要:data数据和methods的方法是否存在,是否定义了 ; beforeCreate 都是 undefiend ;
阅读全文
摘要:vue的声明周期分为 4 个阶段,8个钩子函数 ; 第一阶段:创建 ; beforeCreate:此时的data和method方法未定义 undefined created :此时的data数据和methods 方法已经定义,可以在这里发起异步请求,早发请求可能早点得到数据 ; 第二阶段:挂载 ;
阅读全文
摘要:v-for 的优先级高 延申问题:v-for 和 v-if 为什么不能在一起使用 ? 会造成性能的浪费,因为v-for 的优先级高,所以每次渲染都会执行v-if 判断条件,浪费时间 ;比如 渲染 10 条数据,就要判断 10 次 v-if 条件; 解决办法:在 v-for 渲染列表的外面套一层 te
阅读全文
摘要:1. 子组件标签使用自定义属性 = 参数 ,注册自定义事件修改参数,在子组件内部使用 props 接收自定义属性,直接会把自定义属性和属性值挂载到子组件实例上;但是子组件内部不能直接修改参数,要使用$emit自定义事件通知父组件修改,然后子组件更新参数 ; 2. 使用状态管理工具 vuex ,所有组
阅读全文
摘要:会复用但是可能会产生没有必要的真实DOM更新 ,会降低渲染效率 ;比如使用 index 作为 key 值 ;
阅读全文
摘要:根据唯一标识符key值,把新旧的节点比较,不同就更新到新节点,相同就复用就节点,然后生成新的 Vnode ;
阅读全文
摘要:diff 算法是vue渲染列表数据的时候,把新的 Vnode 和旧的 Vnode 比较,通过 key 值的对应,变化的标签就更新视图,不变的就复用 ;
阅读全文
摘要:vue中的data为什么是返回对象的函数,而不是直接使用对象形式 ; 我们复用组件的时候,要求每一份data数据之间是独立的,不能互相影响,如果写成对象的形式所有的组件使用一份data数据 ,如果使用函数,每次复用组件的时候就会返回一个独立的data数据 ;
阅读全文
摘要:vue2中的数组不能使用索引实现响应式 ,因为vue没有给数组元素添加get和set函数 ; 追加对象的属性的时候不是响应式,要使用 $set 追加响应式 ;
阅读全文
摘要:首先 ,vue 内部使用 Object.defineProperty 给data中的数据添加了 getter 和 setter 函数 ; 当我们访问数据的时候,会触发getter 函数 return 给我们数据值,当我们修改数据的时候会触发setter 函数去修改数据,然后去更新页面视图 ;
阅读全文
摘要:响应式就是 数据发生变化,ui界面自动更新内容 ; vue响应式的实现是在 创建vue实例的时候,遍历data数据,通过 Object.defineProperty给每个数据添加 getter 和 setter 函数 ,获取数据触发 getter 函数,修改数据触发setter函数,然后再sette
阅读全文
摘要:MVVM 是module view view-module 数据驱动视图开发模型,是MVC的改进版,采用业务逻辑和页面解构分离的开发思想; MVVM 实现了 view 和 module 的双向绑定,我们修改了 module ,用户不需要手动的更新 view ;
阅读全文
摘要:vue是创建用户界面的框架,是创建SPA应用的框架,采用了MVVM模型,是数据驱动视图 ;使用了 业务逻辑和页面解构分离的开发思想 ;使用 高效的diff算法渲染列表 ;使用组件化开发,提高代码的复用率,更加的方便维护代码 ;
阅读全文
摘要:搜百度看博客,看文档,看视频,写笔记记录自己的想法 ;
阅读全文
摘要:清除浮动是为了解决父元素因为子元素设置了浮动导致的高度塌陷问题: 此时父元素的高度没有被撑开 ; 父元素的高度已经被撑开 ; 1. 添加额外标签设置clearfix类为clear:both; 2. 父元素添加overflow:hidden 3. 使用before和after双伪元素清除浮动 4. 设
阅读全文
摘要:使用场景 :一个父盒子,一个子盒子 ,父盒子设置display: flex;布局 , 在使用 flex-direction 改变元素的排列方向 ,最后使用align-items :end ;改变侧轴的对齐方式 ; <style> #fa { display: flex; /* 改变主轴和侧轴的方向
阅读全文
摘要:无论是间隔函数 setInterval 还是 延迟函数 setTimeout 都会返回一个标识 id ,我们需要清除定时器,clearInterval (id)clearTimeout(id); 否则会时间冲突,不准确了 ;
阅读全文
摘要:定时器的使用场景:广告弹窗在3 秒之后自动消失 ; 可以使用 延迟函数 setTimeout ;
阅读全文
摘要:倒计时组件的封装核心: 将来的时间戳 - 现在的时间戳 = 需要倒计时的时间 ; 定义一个方法,把需要倒计时的时间戳转换时分秒 ,使用 setInterval 间隔1 秒调用一次方法 ; padStart(字符串长度 , 补充内容) 是属于字符串的方法 , 是补 0 函数 ; 代码:js <!DOC
阅读全文
摘要:自定义指令分为 全局和局部的指令 ; 1. 自定义全局指令: 在 mian.js 中 ,使用 Vue.directive(‘指令名’ , 配置对象 ) 2. 局部自定义指令 在组件中使用 directives 属性自定义指令 ; 批量注册自定义指令: 在src文件新建一个 directive 文件专
阅读全文
摘要:vue指令的本质是给 html 标签新增一些属性 ; vue的指令可以分为 3 中类型 ; 1. 用于渲染数据的指令,比如 v-for ,v-if ,v-show ; 2. 用来交互的指令 ,v-on ,v-module 3. 自定义指令,用来执行某些特定的功能业务 ;
阅读全文
摘要:首先 ,loader 是文件加载器,能够加载资源文件,并对文件进行一些处理,如翻译,压缩 ,最终一起打包到指定的文件中 ;loader 运行在打包项目之前 ; plugin 是插件 ,plugin赋予了webpack各种灵活的功能,如打包优化,资源管理等,目的是为了解决loader无法实现的功能 ;
阅读全文
摘要:在tamplate编译的时候,generater 会生成一个render 函数,通过 render 函数会把 template 内容描述成 vnode ,然后vnode 通过一系列操作转换为真实的 DOM ; 那么vnode 是如何渲染成真实的 dom ; 不论是初始渲染还是更新渲染,vue 通过调
阅读全文
摘要:响应式数据是某个数据发生变化时,页面依赖这个数据的位置会自动更新视图 ; 响应式数据的原理: vue 在初始化 vue 实例时,会 遍历 data 数据,通过Object.defineProperty 给每个数据添加了 getter 和 setter 函数 ,我们获取 数据的时候,会触发 gette
阅读全文
摘要:1. state 保存数据的位置 ; 2. mutations 唯一修改 state 数据的方式 ; 3. getter 监听 state 数据的变化 ; 4. actions 执行异步代码,通过 commit 提交 mutations ; 5. modules vuex 的模块化 ;
阅读全文
摘要:Vuex提供数据(state)来驱动视图(vue components),通过dispath派发actions,在其中可以做一些异步的操作,然后通过commit来提交mutations,最后mutations来更改state。
阅读全文
摘要:首先,调用 actions 中的方法,一般我们在 actions 做登录和登出的请求 ; 然后调用 mutations 的方法修改数据 ,因为 mutations 方法是修改state的数据的唯一方法 ;
阅读全文
摘要:keep-alive 组件的使用场景: 我们切换 2 个组件的时候,2个组件会轮流被销毁创建,但是现在需求,切换到一个组件,另一个组件不会别销毁,会保留原来的状态 ;就要使用 vue 内置的组件 keep-alive ; keep-alive 的作用 : 保留组件的状态,避免组件重新渲染 ; 学习来
阅读全文
摘要:权限可以分为用户权限和按钮权限; 用户权限,让不同的用户拥有不同的路由映射 ,具体实现方法: 1. 初始化路由实例的时候,只把静态路由规则注入 ,不要注入动态路由规则 ; 2. 用户登录的时候,根据返回的权限标识确定用户的动态路由规则 ; 3. 最后使用 addRoutes 添加动态路由规则到rou
阅读全文
摘要:一般在 src 文件夹新建一个 permission 文件 ,单独用来做路由导航守卫业务 ,在 main.js 导入文件即可 ; 主要功能有 判断是否有 token ,以此判断用户是不是登录了 ;
阅读全文
摘要:父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted
阅读全文
摘要:状态码的分类: 2xx:表明请求被成功接收并处理 ; 3xx:表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向 ;重定向就是 从 a 地址跳转到 b 地址 ; 4xx:客户端错误,请求错误,请求参数是否写对了 ; 5xx:服务器自己出错,不是客户端的错误 ; 具体分类: 200: 成功
阅读全文
摘要:1. 折线图 2. 柱状图 3. 饼图 4. 地图 5. 雷达图 延申问题:画折线图和柱状图哪些配置可以改变样式 1. color 设置每个数据的颜色 2. grid 网格设置图表的大小 3. series 设置背景色等 ; 4. toolbox 工具箱组件 下载、转发等 学习 echarts :h
阅读全文
摘要:1. 小程序注册 2. 完善小程序信息 3. 小程序开发 4. 小程序审核&发布
阅读全文
摘要:methods: { //gonavigate()为点击响应事件,可在HTML部分设置 @tap="gonavigate()" gonavigate(){ uni.navigateTo({ //保留当前页面,跳转到应用内的某个页面 url: '/pages/detail/detail' }) } }
阅读全文
摘要:1. 使用 ES6 新增的 set 方法 2. 双重 for 循环 3. sort排序后去重 function fn(arr){ let newArr = [] arr.sort((a,b)=>{ return a-b }) arr.forEach((val,index)=>{ if(val !=
阅读全文
摘要:1. 使用 sort 函数 格式 :arr.sort(( a,b ) => { a - b } ) 2. 封装函数,使用冒泡排序 ; var arr = [123,203,23,13,34,65,65,45,89,13,1]; for(var i=0; i<arr.length-1; i++){ /
阅读全文
摘要:var arr = [123,203,23,13,34,65,65,45,89,13,1]; for(var i=0; i<arr.length-1; i++){ //每一轮比较要比多少次 for(var j=0; j<arr.length-1-i; j++){ //如果第一个比第二个大,就交换他们
阅读全文
摘要:Promise 是js内置的构造函数,也叫做期约函数 ,它有 3 种状态 ,等待状态 pending ,成功状态 fullfilled ,失败状态 reject ;2 个过程, 等待状态到成功状态 会调用 Promise实例 的then 函数 来加工响应数据 ;等待状态到失败状态会调用 Promis
阅读全文
摘要:模板字符串 具体操作: 首先 , 使用反引号包裹字符串,然后使用 ${} 嵌入变量 ;
阅读全文
摘要:给事件添加 stop 修饰符 ,比如 click.stop ; 补充: 阻止默认行为 prevent 修饰符 ,超链接的跳转,表单的默认提交 ; once 修饰符 事件只触发一次 ps:事件修饰符可以连着写;如 click.stop.once 表示只会阻止第一次冒泡 ;
阅读全文
摘要:在初始化 Vue 实例的时候,会遍历data中的数据,通过 Object.defineProperty 给数据添加 getter 和 setter 函数 ,获取数据触发 getter 函数 ,修改数据触发 setter 函数去修改,然后在 setter 函数里面执行dom更新行为 ;
阅读全文
摘要:主要分为四点: 1. Vue3 使用了 proxy 替代了 Object.defineProperty 实现响应式数据 ,所以 vue3 的性能得到了提升 ; 2. Vue3 可以在 template 模板使用多个根标签,因为 Vue3 新增了 Fragment 内置组件 ; 3. Vue3 使用组
阅读全文
摘要:$set 是 vue2 中对象用来追加响应式数据的方法 ; 使用格式 : $set(对象 , 属性名 , 值 ) vue3中使用 proxy 替代了 Object.defineProperty 实现对象的响应式数据 ,所以在 vue3 中直接添加对象属性就是响应式的数据 ,用不上 $set 方法 ;
阅读全文
摘要:使用场景:我们改变 dom 结构所依赖的数据的时候,不能直接操作 dom ,因为 dom 还没有更新完成 ; 作用 : nextTick 用来感知 dom 的更新完成,类似于 updated 函数 ; 原理:通过控制 异步队列渲染 dom 和 nextTick 的回调函数先后执行顺序 ;
阅读全文
摘要:首先,跨域分为开发环境和生产环境的跨域 ,我们在开发环境可以使用 proxy 代理 给 target 设置请求接口地址 ,以前使用的是 jsonp 跨域;生产环境使用 Nginx 反向代理 ; 延申问题:项目中怎么配置代理 在 vue.config.js 文件中设置 proxy 属性,给target
阅读全文
摘要:首先,要知道基本数据保存在栈内存,对象数据保存在堆内存,对象地址(就是变量名)保存在栈内存,浅拷贝只会复制栈内存的内容,而深拷贝会复制栈和堆内存中的内容 ; 所以深拷贝的对象有 2 份地址 和 2 份数据,操作数据互不影响 ; 深拷贝的方式 : 第一:使用递归函数 ; 第二:使用第三方插件库,如 l
阅读全文
摘要:js 有2大数据类型分类 : 基本数据类型: 1. string 字符串 使用单、双引号包裹,或者使用反引号包裹 2. number 数字类型 3. boolean 布尔值 true false 4. undefined 未定义,表示声明了变量,但未初始化 5. null 空指针,准备用来保存对象,
阅读全文
摘要:rem (root em )是 c3 新增的相对单位 ,相对的是html根元素,动态变化自己的大小 ; 补充: em 也是相对单位,相对的是父元素来动态设置自己大小 ; px 是绝对单位,是相对于屏幕显示器而言的,是计算机的数字化图像长度单位 ;
阅读全文
摘要:1. 使用相对单位 rem ,他是根据 根元素 html 的大小来计算字体大小 ; 2. 使用 媒体查询 media ,不同的设备宽度设置不同的样式 3. 使用 百分比布局
阅读全文
摘要:1. 使用 z-index 2. 使用定位,脱离标准流
阅读全文
摘要:层级的大小使用 z-inde 来定义,层级大的会覆盖层级小的 ; 举个例子,我们设计弹窗的时候,会涉及三个层面,我们把遮罩层mask放在第二层,把弹窗内容放在第一层 ,页面内容显示在第三层;
阅读全文
摘要:TypeScript 是微软基于JavaScript开发的开源编程语言,是js的超集,扩展了js语法并添加了静态类型,可以兼容js所有的运行平台; js 是弱类型语言 , ts 是强类型语言 ; js中形参和实参不要求类型相等;ts严格要求类型对应 ,支持函数重载 ; ts不能直接被js解析器执行,
阅读全文
摘要:基础:使用konva,首先需要创建舞台也就是stage,然后创建一个Layer图层,将图层放到舞台上,将图形等内容放到图层上 ; 第一步:创建一个Stage舞台 , 就是创建一个 stage 实例 ; 第二步:创建一个Layer图层 ,创建一个layer 实例 ; 第三步:创建一个图形, 什么图形都
阅读全文
摘要:1. vue3 使用 proxy 替换Object.defineProperty 实现数据响应式 ,所以vue3 的性能得到了提升 ; 2. vue3 使用组合式 API 替代了 vue2 中的选项式 API ; 3. vue3 的template 中可以使用多个根标签,因为vue3新增了 frag
阅读全文
摘要:主要实现的方式: 1. 第一种方法 ,在子组件标签使用自定义属性=“参数”和自定义事件,在子组件内使用 props 接受自定义属性 ;如果子组件要修改参数,不能直接修改,因为 vue 时单向数据流 ,要通过$emit 自定义事件在父组件修改数据,子组件自动更新 ; ps:在子组件标签使用 v-mod
阅读全文
摘要:虚拟dom 是js模拟的一颗dom树,也是 js 对象 ; 虚拟dom 时相对于 真实dom而言的,操作真实 dom 开销太大,降低了性能,所以使用 虚拟 dom 替代真实 dom 完成操作和计算功能,极大提升了性能 ; 优点: 1. 无需手动获取dom ,操作 DOM ; 2. 跨平台: 虚拟 D
阅读全文
摘要:Vue 提供了 Vue.set (object, propertyName, value) / vm.$set (object, propertyName, value) 来实现为对象添加响应式属性。 vm.$set 的实现原理是: 如果目标是数组,直接使用数组的 splice 方法触发相应式; 如
阅读全文
摘要:1. Proxy 可以直接监听对象而非属性;但是 ,object.defineProperty 只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历。Proxy 可以劫持整个对象,并返回一个新的对象 2、proxy 不仅可以代理对象,还可以代理数组,还可以代理
阅读全文
摘要:共同点:都是保存在浏览器端的。 区别: 1.cookie数据始终携带在同源的http请求中,即cookie在浏览器和服务器间来回传递,而sessionStorage和Localstorage不会自动把数据发送给服务器,只在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属
阅读全文
摘要:在vue2中的内置组件: 动态路由中的 component :作用:动态显示路由的挂载点,使用 is 属性动态显示组件 ; keep-alive :作用:使被包裹的组件保留状态,避免被重新渲染 ; 路由中的router-link :作用:和 超链接类似,使用 to 属性制定 url 跳转页面 ; r
阅读全文
摘要:作用: DOM 渲染是异步耗时的, vue2.x 需要等到 DOM 渲染完成之后做某个事情,需要使用 this.$nextTick , vue3.x 则直接提供了 nextTick 这个方法去实现 ; 使用: 2 种方式: // 使用await await nextTick() 渲染之后的代码 //
阅读全文
摘要:使用场景:使用父子组件通信的时候 ; 作用: 用来声明组件有哪些自定义事件,不在emtis里面都会当成原生事件,绑定给组件的根标 签。 好处: 不在像 vue2 使用 .native 修饰符 在 vue2 中:组件中绑定 click 事件 ,原来click事件是无效的,因为组件上面的所有事件都是自定
阅读全文
摘要:vite 是尤雨溪团队开发的新一代前端构建工具,作者尤雨溪宣传的时候表示 vite 是下一代的构建工具,并表示自己再也不会 webpack 了 ; vite 的优点主要有3点 ; 第一:开发环境中,无需打包操作,可快速的冷启动 第二:即时的热重载 ( HMR )hot module replacem
阅读全文
摘要:都是模块规范,和 CommonJs 一样都是社区规范,ES-module 才是官方规范,而且官方规范是趋势 ; AMD:Asynchronous Module Definition 异步模块定义,即并行加载所有的模块 ; CMD:Common Module Definition,公共模块定义规范,在
阅读全文
摘要:选项式 API 组合式API beforeCreate 不需要 created 不需要 beforeMount onBeforeMount mounted onMounted beforeUpdate onBeforeUpdate updated onUpdated beforeUnmount 【v
阅读全文
摘要:Vnode 是 JavaScript 对象,就是把标签结构的信息描述成js对象 ; Vnode 的作用:通过 render 函数 将 template 描述成 Vnode ,然后通过一系列操作转换真实dom ; ps:template 编译过程:https://www.cnblogs.com/zhu
阅读全文
摘要:1. 监听单个 watch(变量,(新值,老值)=>{}) 2. 监听多个 watch([变量1,变量2],(新值,老值)=>{}) 3. 监听对象 watch(()=>对象,(新值)=>{}) 4. 监听对象属性 watch(()=>对象.属性,(新值,老值)=>{}) 5. 监听对象多个属性 w
阅读全文
摘要:1. Vue3 和 VUe2 性能提升 ;使用 proxy 代替 defainProperty 实现响应式数据 ;使用 ts 书写代码 ; 新特性有:组合 api compositionApi ;新的内置组件 (Fragment/Teleport/Suspense) 2. 追加响应式数据 在 Vue
阅读全文
摘要:传统的项目中,页面的切换和跳转使用的是超链接实现,但是目前的SPA 是基于组件和路由实现的,页面的切换和跳转是由路由机制完成,区别是更新了视图但不重新请求页面; 原理是把url 和组件之间建立映射关系,展示不同内容的时候切换路径 url ,即切换组件 ; 路由的模式有 2 中,哈希模式和历史模式 ;
阅读全文
摘要:过滤器可以格式化我们所需要的数据格式 ; 自定义过滤器分为全局和局部过滤器: 全局过滤器在 main.js 中使用 Vue.direct4ive( 过滤器名字,定义过滤器的具体行为函数 ) ; 局部过滤器在 directives 属性中定义 ; 使用过滤器在管道符的后面加上过滤器名字 ;
阅读全文
摘要:使用 v-for 渲染列表的时候会使用 key 给标签一个唯一标识符 ,为了能够高效的跟新虚拟 dom ; 如果没有使用 key 或者key值相同,就不能准确复用虚拟 dom ;
阅读全文
摘要:不可以,因为无论computed 中的属性名还是 data 又或者是props中的属性名,都会别挂载到组件实例上,所以名字都不允许重复 ; ps:好比一个作用域里面不允许定义2个相同的变量名 ;
阅读全文
摘要:package.json 是项目描述文件,记录了当前项目的信息,比如项目的名字,版本,作者,还有所依赖的第三方模块 ; dependencies 是项目依赖,是项目上线时要依赖的第三方包 ; devdependencies 是开发依赖,是线上运营阶段不需要依赖的包,但是开发阶段必须依赖的包 ;称之为
阅读全文
摘要:是什么? npm(全称Node Package Manager,即 node 包管理器) ,是Node.js默认的包管理系统 ; 区别: yarn 的速度开快,因为yarn 是并行安装,npm是串行安装, yarn 产生一个 yarn.lock 记录包名和版本号,npm 产生一个 package.l
阅读全文
摘要:作用:通过构造函数创建实例对象 ;通过 new 出来的实例可以访问构造函数的属性和方法 ;
阅读全文
摘要:1. css-loader 翻译css ,可以把sass / less 代码翻译成 css 代码 ; 2. imgage-loader 加载并压缩图片文件 3. source-map-loader 加载额外的map文件,方便断点调试,但体积比较大; 4. babel-loader ES6转换ES5
阅读全文
摘要:首先,它们的共同点三者都是前端构建工具,grunt和gulp早期比较流行,现在 webpack 是主流; 区别:grunt 和 gulp 基于 任务和流 ; webpack 基于入口文件,webpack 会自动解析入口文件所需要加载的所有资源文件,然后用不同的loader翻译不同的文件,使用 plu
阅读全文
摘要:webpack 的运行流程是一个串行的流程,从启动到结束会依次执行以下步骤 ; 1. 初始化参数:在配置文件,读取并合并参数,得到最终的参数 ; 2. 开始编译:拿着上一步的参数初始化 Compiler 对象,加载所有配置的 plugin ,开始执行编译 3. 确定入口:根据配置中的 entry 找
阅读全文
摘要:1. 社区庞大,活跃,紧跟技术的前言,不断发展迭代 ; 2. 专注处理模块化的项目,可以开箱即用 ; 3. 通过 loader 扩展,可以把所有类型的文件解析打包 ; 4. 通过plugin 扩展 ,完整好用,灵活 ;
阅读全文
摘要:webpack 是模块化的打包工具,webpack 里面所有文件都是模块 ,通过 loader 转换文件,比如 sass less 转换 css 文件使用 css-loader , 通过 plugin 注入钩子 ,最后输出由多个模块组合成的压缩文件,webpack 专注于构建模块化项目 ;
阅读全文
摘要:为什么有的时候使用require引入组件不会报错,有的时候就会报错,需要加上default就不会报错 ? webpack 支持 CommonJS和 ES6模块打包,当我们引用组件的时候,在 script 标签内使用的是 ES6 的语法且使用 export default 默认导出。但是,requir
阅读全文
摘要:export function tranListToTreeData(list, rootValue) { // list是最完整的数组 let arr = []; // 记录儿子 list.forEach((item) => { // 记录是否有儿子 if (item.parentId rootV
阅读全文
摘要:组织结构是一个公司的灵魂 ,多使用树型结构 ; 页面格式: 渲染头部 : 头部代码: <template> <el-row type="flex" justify="space-around" style="height: 40px; width: 100%" align="middle" > <!
阅读全文
摘要:1. 打包的时候 , 通过插件把css代码单独抽离出来使用 link 引入 2. 打包的时候 , 通过webpack内置插件optimization 把 公共的js代码抽离出来 ps:打包之后,代码冗余,体积大 ,原因是 相同的模块 在不同的入口之间没有得到复用 ,bundle 之间比较独立 ,bu
阅读全文
摘要:首屏加载优化是对于 SPA 来说的 ,首次加载所有的 html css js 所需的文件 ,后面就不会因为用户对页面的操作而跳转页面 ,没有跳转页面如何展示不同的内容呢 ? 使用 Vue 的路由机制 ,实现不同内容的展示 ; SPA 的优点 : 1. 页面切换速度快 2. 页面内容的改变,不需要重新
阅读全文
摘要:不会一次性加载全部的路由 ,使用哪个页面 就会加载哪个路由 ; 可以优化spa页面首次加载 ;
阅读全文
摘要:首先,箭头函数没有自己的 this 环境变量 会沿用作用域使用父级this ; 由Vue 管理的函数 ,如果写成箭头函数 this 就不在是 Vue 实例 了 ;
阅读全文
摘要:gitlab 相当于 gitee 的企业版形式 ; 步骤 1. 使用 Vscode 编写代码,使用 gitlab托管代码, 2. 新建腾讯云 web 应用 ,gitlab 关联 web应用, 3. 每次push代码到gitlab,gitlab会通知web应用拉取代码,更新网页 ; 自动部署的作用 :
阅读全文
摘要:1. 安装 包 npm i xlsx yarn add xlsx 2. 封装一个上传的组件 src/components/UploadExcel/index.vue code : <template> <div class="upload-excel"> <div class="btn-upload
阅读全文
摘要:ps:路由的两种模型 hash 和 history 模式 ;推荐 hash 模式 ; 打包:ps:要和package.json 的打包命令一致 ; 性能分析和体积优化 ,一些 js 文件的体积比较大 ,可能是 echarts 文件 ; 1. 打开vue 的ui 界面 2. 导入项目文件 3. 打包项
阅读全文
摘要:语言包的实现原理 :键值对的匹配; 1. 第一步,安装包 npm i vue-i18n@8.22.2 yarn add vue-i18n@8.22.2 2. 引入语言包 3. 封装一个多语言的实例化文件 src/lang/index.js import Vue from "vue"; import
阅读全文
摘要:错误场景:使用大屏插件 screenFull 报错:in ./node_modules/screenfull/index.js Module parse failed: Unexpected token (59:42) You may need an appropriate loader to ha
阅读全文
摘要:不正确 ,因为 js 是 动态 、弱类型 ,即时编译的语言 ;js中的小数都是浮点型 ,比如 0.1 实际上可能是 0.11111111... 0.2 可能是 0.2 22222..... 所以 0.1 + 0.2 并不等于 0.3 可能等于 0.33333333....
阅读全文
摘要:文件结构: index.js 文件代码 : import PageTools from "./PageTools"; import UploadExcel from "./UploadExcel"; import ImageUpload from "./ImageUpload"; import Pr
阅读全文
摘要:template 是 ES5 新出的语法 ,template 是不会被页面显示的,但是 vue 中会被翻译成 dom 结构 ; template 编译的过程 : parse 解析生成ast 抽象语法树 - - -- -generate() 生成 render 函数 -- -- -- - 调用 new
阅读全文
摘要:使用场景:我们开发项目的时候,会遇到组件之间的切换,一般都是创建组件销毁组件来回切换 ;但是现在需求是切换组件的时候,另一个组件不会销毁; 基于这个需求 ,我们使用 keep-live 组件包裹起来要切换的组件 ; keep-live 是 vue 内置的组件 ,避免组件被重新渲染 ; keep-li
阅读全文
摘要:为什么引进 mixins 随着项目的开发,组件越来越多 ,这就导致了在各个组件中需要编写功能相同的代码段,重复地定义这些相同的属性和方法,导致代码地冗余,还不利于后期代码的维护 混入mixins 的创建 :在 src 创建 mixins 文件 - list.js 文件 在 list.js 文件中 抽
阅读全文
摘要:ps:按钮权限控制 是给所有的按钮都要做判断 ,定义一个判断方法 ,此方法是一个全局的方法 ,可以使用 混入 mixins 定义方法 ; 注意混入 分为 全局混入和局部混入 ;此处使用全局混入定义 checkPermission方法判断按钮是否有权限 ; 逻辑 : 1. 需要给每一个按钮设置一个按钮
阅读全文
摘要:原因:用户登录的时候没有清除 routes(依赖routes渲染菜单) 和 重置 userAsyncRoutes (动态路由) vuex 的数据不会丢失 ,刷新才会丢失 ;所以退出并不会清除vuex的数据 ; 退出逻辑 重置路由规则 routes & 重置 路由实例 router ;
阅读全文
摘要:ps:404 页面一定要放在最后 , { path: "*", redirect: "/404", hidden: true } ,在创建路由实例的时候,加载路由规则 routes 的时候默认把 404 页面放在最后 ,但是使用 addRoutes 之后 404 页面就不再最后了 ,所以刷新页面的时
阅读全文
摘要:ps:服务器返回用户的权限标识 ; 主要在登录的时候判断用户的权限 1. 左侧菜单显示 2. 路由的页面跳转 - 使用 addRoutes 增加动态路由规则并注入路由实例 router ;实现位置:在前置路由守卫中,和登录判断一块的 ; permission 文件实现 前置路由守卫 是否登录(tok
阅读全文
摘要:使用 mixins 混入 的目的 :复用代码,维护代码 ; 局部混入: 全局混入 + 按钮权限控制 : ps:定义一个方法 ,checkPermission (str) str 是按钮的权限标识 , 服务器返回给我某个用户的按钮权限标识数组 points 如果 points 包含按钮的权限标识 st
阅读全文
摘要:rbac role base access control 是基于角色的权限控制 ;角色是用户和权限的中间桥梁 ;不同的角色有不同的权限 ; 不同的用户有不同的角色 ,所以用户用户角色拥有的权限 ; 给用户关联角色 ; 1. 暴漏弹框 2. 显示所有的角色 3. 回显用户拥有的角色 4. 确认修改提
阅读全文
摘要:mvvm 是Model-View-ViewModel 数据驱动视图模型,是mvc 的改进版 ,mvvm把界面ui和业务逻辑分离 ,model 是data属性的数据 , view 是模板结构 ,viewmodel是vue实例 ;
阅读全文
摘要:vue 是创建用户界面的 js 框架 ,是创建 spa 应用的框架 ;使用 mvvm 模式,数据驱动视图模型 ,业务逻辑和页面解构分离开发;使用高效的 diff 算法渲染页面结构 ; 采用组件化模式,提高代码复用率、且让代码更好维护
阅读全文
摘要:点击修改按钮:定于一个修改的方法,调出弹出层 ; async editRow(id) { // 获取详细信息 当前修改的角色信息 @lcick row.id const res = await getRoleInfoApi(id); // 弹框打开 推荐先赋值回显数据 然后打开弹窗 this.$re
阅读全文
摘要:页面内容: 使用 element-ui 实现 tabs 标签页 :https://element.eleme.cn/#/zh-CN/component/tabs#tab-pane-attributes 1. 把内容封装成一个组件 - 表格 table 2. tabs 的 v-model 和 @tab
阅读全文
摘要:有代码:https://gitee.com/zhu-longxu/zhulx-rbac ps:注意本地路由 router 有哪些规则?服务器返回的数据格式? 方法一:本地路由router 包含静态路由规则 ; 虽然动态路由规则定义了但是没有注入;动态路由规则在登录判断的时候选择性是否注入 ;服务器返
阅读全文
摘要:// 导入自定义指令文件 import * as directive from "@/directive"; // 批量注册自定义指令 Object.keys(directive).forEach((item) => { // item就是模块里面每个暴露的属性名 directive[item] 就
阅读全文
摘要:index文件代码: import Vue from "vue"; import Vuex from "vuex"; // 导入根getters import getters from "./getters"; // 导入三个模块 import app from "./modules/app"; /
阅读全文
摘要:1. wan + r 输入 regedit 打开注册表 注册表编辑 2. 找到 HKEY_CLASSES_ROOT\*\shell分支 3. 在shell下新建“VisualCode”项,在右侧窗口的“默认”双击,在数据里输入“用VSCode打开” 4.在“VisualCode”下再新建Comman
阅读全文
摘要:大文件上传思路一、场景平时我们上传的图片、文档可能格式比较小,用常规上传没有问题;但是如果涉及到大文件,如果上传过程中,网络断了,需要重新来; 比如文件过大,响应时长超过了请求限定的时长,所以传统的思路就不合适了案例: 在线课堂,网盘、需要上传大量的大文件课程视频、音频二、思路核心思想: 切片上传+
阅读全文
摘要:RBAC是Role Based Access Control的英文缩写,意思是 基于角色的访问控制。 RBAC实际上就是针对产品去挖掘需求时所用到的Who(角色)、What(拥有什么资源)、How(有哪些操作)的方式。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对W
阅读全文
摘要:有做过,我们前端这边主要做的就是菜单权限控制和按钮显示控制 追问: 说说菜单权限怎么做的? 权限设计是⼀个需要前后端配合的事情,⼤概分成下⾯⼏个步骤 1. 项⽬通过⼏个业务模块的配合⽣成对应的权限数据 2. 把后端返回的权限数据和前端本地的路由做对⽐,得到过滤之后的有资格显示的路由数组 3. 调⽤路
阅读全文
摘要:有的,之前在做⼀个通⽤的上传组件的时候,⼀开始是通过传统的⽗⼦通信实现的,⽗传⼦实现的图⽚ 回显,⼦传⽗实现的图⽚url抛出传给给接⼝,后来使⽤v-model做了⼀点优化,简单了不少 追问: 具体是怎么做的,⼤概说⼀下步骤 我想想哈,⼤概是我们知道v-model是⼀个语法糖,当你在⼀个组件上写了v-
阅读全文
摘要:导出的话,我们因为到处的数据量不⼤,所以直接采取的时候前端主导的⽅案,参考的现成⽅案实现的 导出 ⼤概得流程就是 1. 调⽤后端接⼝得到要导出的数据 2. 把数据简单处理⼀下转化成导出插件需要的格式 3. 把数据配置到对应的位置就⾏ 插件会⾃动帮助我们⽣成excel⽂件并且⾃动下载到本地 追问: 那
阅读全文
摘要:有过,项⽬开发的时间⻓了,沉淀了不少业务通⽤全局组件,想把他们统⼀进⾏注册,就封装了⼀个⼩ 插件 当时其实⼀开始也没有什么思路,后来扒了⼀下 elementUI的源码,仿了⼀下它的写法,流程我还⼤概记 得 先是把所有的组件放到⼀个数组中,然后在插件的install⽅法⾥遍历整个数组调⽤Vue.com
阅读全文
摘要:// 场景1:功能复用,多个页面都用到某个功能 // 场景2:页面逻辑太多,进行拆分功能(添加/修改独立出去) // 注意些什么: // 1. 抽离模板(复用) // 2. 设计props el-button type/size/ // 3. 设计插槽 el-dialog title 插槽 有的,不
阅读全文
摘要:当时公司的场景⼤概⼀个excel⽂件⾥就⼏⼗条数据,量⽐较少,和后端商量之后制定了前端主导的⽅ 案,解析的过程放到了浏览器端做,当时是参考了⼀下vue-admin中的现成的⽅案 ⼤概流程是这样的,⼈事那边准备好⼀个标准的excel⽂件,然后通过插件解析成js数据,把js数据格式 化⼀下,最后个通过调
阅读全文
摘要:主要是在组件和后端返回的数据之间,或者组件产⽣的数据和需要提交给后端的数据之间,有可能会出 现结构对不上,这个时候可能会处理⼀下,举个例⼦,⽐如说我们常⽤的tree型组件要求必须是嵌套的 tree型数组,这个时候就需要处理⼀下,再⽐如提交的时候接⼝要求的是字符串,我们组件给到的数组, 也需要处理 追
阅读全文
摘要:token 失效分为主动失效和被动失效 主动失效 就是自己设置函数检查token是否失效了, 主要步骤 ;1 1.在登录的时候记录存储token的时间, 2. 在request文件,设置一个函数,用来检查token是否过期 3. 在请求拦截器记录当前的时间,并且引用函数主动检查token是否过期 ;
阅读全文
摘要:啊,有的,在项⽬⾥⾯我主要是封装过axios的拦截器部分 我在请求拦截器⾥⾯做了注⼊全局token的事情,这个事⼉是因为有很多接⼝都需要这个token来做数据 鉴权,为了避免书写多次 统⼀配置了⼀下 响应拦截器的部分,我主要是做了⼀个⾃定义的成功错误判断 这个事⼉,可以简单说⼀下,因为我们知 道 拦
阅读全文
摘要:vue这边的路由⾃带了路由前置守卫,我们可以在前置守卫⾥拿到token数据,然后根据需求做分⽀判 断,要是token存在就使⽤next⽅法正常放⾏跳转,否则可以强制跳回到登录,让⽤户去获取token import router from "./router"; import { getToken }
阅读全文
摘要:我们公司的token管理都是通过vuex配合本地存储来做的,使⽤vuex是因为token数据⽐较特殊,在很多 模块中都可能会⽤到,vuex⽅便管理,配合本地存储⽐如localstorage,是因为vuex有⼀个不好的地⽅ 就是刷新就丢失,因为它是基于内存嘛,配合⼀下localStorage可以保持持
阅读全文
摘要:// import parseTime, formatTime and set to filter /** * Show plural label if time is plural number * 如果时间是复数,则显示复数标签 * @param {number} time * @param {
阅读全文
摘要:有⽤过的,我在公司⾥⽤过的场景主要是为了和后台对接⼝的时候切换根域名baseURL时⽤,因为公司 有⼏个不同的环境嘛,⼀个环境对应前端⼀个环境变量⽂件,同样⼀个环境变量⽐如说VUE_APP_URL 可以在不同的⽂件⾥配置不同的接⼝地址,再配合运⾏命令配置启动时指定⼀下运⾏的环境变量⽂件很 容易就切过
阅读全文
摘要:场景 :为了减轻公司服务器压力,我们把要上传的文件 放到第三方服务器上 保存 ; 什么情况下才会使用第三方服务器保存资源 : 1. 资源比较多 ,比如 在线课堂等 需要上传视频的网站 2. 网站资源固定,不经常改动 ; 分类: 前端上传 前端上传文件到第三方服务器 图 1 所示 后端上传 后端上传文
阅读全文
摘要:传统的图片上传 ; 封装一个上传 接口 ; 注意 把 input 隐藏掉 ;-- hidden ; 点击事件上传 ; element-ui 的图片上传 https://element.eleme.cn/#/zh-CN/component/upload#methods
阅读全文
摘要:预览详情 : 父组件:注册引入子组件 ;只需要传递一个数据 limit ;这是限制显示多少张图片 ; 子组件: - 图片上传 - el-upload 代码 ; <template> <div> <el-upload action="#" list-type="picture-card" :file-
阅读全文