自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 深拷贝、浅拷贝

目录1、深拷贝与浅拷贝的区别2、为什么要使用深拷贝3、手写深拷贝1、深拷贝与浅拷贝的区别浅拷贝: 将原对象的引用直接赋给新对象,新对象只是原对象的一个引用,而不复制对象本身,新旧对象还是共享同一块内存深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”,新对象跟原对象不共享内存,修改新对象不会改到原对象2、为什么要使用深拷贝我们希望在改变新的数组(对象)的时候,不改变原数组(对象)3、手写深拷贝arr=[100, [{a :

2021-06-16 09:32:24 188

原创 nginx的使用

目录Windows模式 下载nginxhash模式history模式Windows模式 下载nginx1、nginx下载官网下载地址:http://nginx.org/en/download.html2、下载之后,解压到指定的目录,就可以看到以下的目录3、控制台(CMD)切换到Nginx目录下,输入start nginx ,然后在浏览器页面输入localhost,出现如下界面则表示安装成功。默认监听80端口号。注意:输入控制台的路径必须为纯英语,否则不能安装成功。4、nginx命令介绍

2021-06-07 12:04:13 832 1

原创 webpack 打包优化

第一步:先配置路由懒加载:在配置路由时,可以使用路由懒加载,当切换到这个路由时才会加载这个页面。我们可以在路由规则中配置如下:{ path: '/', // 路由 name: 'Home', // 路由名称 component: () => import("@/views/Home.vue") // 使用这种方式来实现路由懒加载 }第二步:关闭生产环境下的SourceMap映射文件:我们关闭这个之后,在打包时就不会生成后缀名为.map的文

2021-06-06 19:34:22 283

原创 vant-ui 按需引入

1.安装vant-ui插件#先安装vant-uicnpm install vant-ui --save # 再安装按需引入的插件cnpm i babel-plugin-import -D2.在babel.config.js中添加配置module.exports = { plugins: [ ['import', { libraryName: 'vant', libraryDirectory: 'es', style: true }, '

2021-06-03 21:49:07 97

原创 vue中封装axios 以及api 统一管理

目录axios 简介1.安装axios2.创建文件夹3.封装axios3.1引入axios3.2引入vuex3.3引入vant3.4引入我们的环境变量3.5创建axios实例3.6添加请求拦截3.7响应拦截3.8导出封装的axios函数4.api统一管理4.1引入我们封装的axios4.2使用async/await进行请求优化4.3导出5.使用axios 简介axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:从浏览器中创建 XMLHttpRe

2021-06-03 20:47:11 475

原创 移动端项目开发过程

目录一、确定项目技术栈二、搭建项目1.手动搭建2.使用模板三、多环境变量四、路由五、组件化开发六、webpack配置打包优化(vue.config.js)一、确定项目技术栈技术栈描述版本vuevue.js2.0vue-clivue脚手架3/4vue-routervue路由vuexvue状态管理工具axios异步请求数据vant移动端框架rem自适应布局scssCSS 扩展语言webpack打包工具

2021-06-02 11:57:09 2048

原创 多环境变量配置

1.第一步首先我们在项目根目录下找到package.json文件,在scripts中配置"scripts": { "serve": "vue-cli-service serve", // 开发环境 "build": "vue-cli-service build", // 生产环境 "test": "vue-cli-service build --mode testing" // 测试环境 },我们根据不同的需要来使用不同的变量环境。2.第二步在根目录下创建.env.d

2021-06-02 11:02:09 208

原创 transition 转场动画

定义过渡transition是一个复合属性,包括transition-property、transition-duration、transition-timing-function、transition-delay这四个子属性。通过这四个子属性的配合来完成一个完整的过渡效果。transition-property: 过渡属性(默认值为all)transition-duration: 过渡持续时间(默认值为0s)transiton-timing-function: 过渡函数(默认值为ease函数)

2021-06-01 21:19:34 401

原创 vue中keep-alive的使用

keep-alive是一个抽象的组件

2021-06-01 20:15:05 266

原创 js中的事件委托

事件委托1.什么是事件委托事件委托,又名事件代理。通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。利用冒泡的原理,把事件加到父级上,触发执行效果。2.好处1.大量减少内存占用,减少事件注册。​ 2.新增元素实现动态绑定事件3.实现方式一、可用addEventListener();** //所有主流浏览器,除了IE8及更早IE版本。1.语法:e

2021-05-30 21:00:33 78

原创 什么是闭包

闭包闭包简单来说就是函数内部嵌套函数,内部函数可以访问外部函数的变量。1、闭包的作用闭包就是能够读取其他函数内部变量的函数。闭包是将函数内部和函数外部连接起来的桥梁。vue中的data就是一种闭包的形式。闭包作为回调函数,可以实现函数的复用2、优点缺点​ 优点: 1.长期驻留内存,可以缓存数据 2.可以重复使用变量,不会造成变量污染​ 缺点: 1.占内存、 2.对捕获的变量是引用,不是复制

2021-05-30 20:50:20 925

原创 var let const的区别

var let const的区别1.是否存在变量提升?var声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined。let和const不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError错。console.log(f) //undefinedvar f = 1 ;console.log(g) //ReferenceError: g is not definedlet g = 2;console.lo

2021-05-30 20:20:58 52

原创 作用域、作用域链、自由变量、变量提升

作用域一个变量和函数可以使用的范围就是作用域。作用域分为全局作用域、函数作用域、块级作用域js中首先有一个最外层的作用域,全局作用域;js中可以通过函数来创建一个独立作用域称为函数作用域,函数可以嵌套,所以作用域也可以嵌套;es6中新增了块级作用域(大括号,比如:if{},for(){},while(){}…);且只适用于const、let。自由变量当一个变量在当前作用域被使用了,但是为被定义,就称为自由变量。var a = 100; function fn1(){

2021-05-30 20:06:11 49

原创 Vuex的使用

Vuex是什么vuex :是一个专为vue.js开发的状态管理器,采用集中式存储的所有组件状态,通过vuex我们可以解决组件之间数据共享的问题,后期也方便我们管理以及维护Vuex的五大核心state: 存放状态,例如你要存放的数据mutatis:修改状态,并且是同步的,在组件中使用$store.commit(“事件名”,可以发送参数);来调用,这个和我们组件中的自定义事件类似。actions:异步操作,在组件中使用$store.dispath(“事件名”,可以发送参数),来调用actions

2021-05-28 21:39:11 84

原创 call、apply、bind的区别

call、apply、bind的区别三者都可以改变函数的this对象的指向。call和apply改变this,会让函数立刻执行;而bind 改变this,不会让函数立刻执行。第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局window三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。// 应用场景:伪数组借用数组方法 NodeList/arguments

2021-05-27 16:31:50 64

原创 this指向、new过程

this指向在浏览器里,在全局范围内this 指向window对象在普通函数中,this永远指向最后调用他的那个对象;构造函数中,this指向new出来的那个新的对象;箭头函数中this比较特殊,箭头函数this为父作用域的this,不是调用时的this.要知道前四种方式,都是调用时确定,也就是动态的,而箭头函数的this指向是静态的,声明的时候就确定了下来;let name = "zjk"; let o = { name : "Jake",

2021-05-26 22:00:10 250 1

原创 原型 原型链

1.prototype每个函数都有一个prototype属性 被称为显示原型2.__proto__每个实例对象都会有一个__proto__属性背称为隐式原型每一个实例对象的隐式原型__proto__属性指向自身构造函数的显示原型prototype3.constructor每个prototype原型都有一个constructor属性,指向它关联的构造函数4.原型链获取对象属性时,如果对象本身没有这个属性,那就会去他的原型_ _proto_ _上去找,如果还查不到,就去找原型的原型,一直找到最顶

2021-05-26 20:58:02 53

原创 arguments

arguments是什么arguments:是函数内部,专属的一个数组(伪数组),也叫对象。 用来接收当前函数的所有实参 数据的集合(实参的集合):集合没法直接运算 需要先解析:数组的解析 序号(索引):集合中数据的编号,从0开始,0表示第一个 个数(长度):集合中有几个数据 如何解析: 数组[索引] 如何获

2021-05-25 21:19:23 83

原创 数组的方法

常见的数组方法pushpush() 添加一个或多个参数到数组的尾部,**原来数组会改变**,返回的是添加后的数组的长度var arr = [1, 2, 3];// arr[arr.length] = 4;var res = arr.push(4, 5);console.log(arr); // [ 1, 2, 3, 4, 5 ]console.log(res); //5poppop()从数组尾部删除一个元素,原数组会改变,返回的是被删除的元素var arr = [1, 2,

2021-05-25 20:34:22 225 1

原创 数据类型的判断

常用的判断数据类型有四种:typeof、instanceof、constructor、Object.prototype.toString.call()数据类型有两种表示方式:String,‘string’1.typeof//基本数据类型console.log(typeof 100)//"array"console.log(typeof 'hellow')//"string"console.log(typeof true)//"boolean"console.log(typeof undefi

2021-05-25 17:08:22 120

原创 js数据类型

js数据类型分为两类:1.基本数据类型(又称为简单数据类型或值类型):String Null Number Boolean Undefined2.引用数据类型(又称为复杂数据类型):Object。包含Object、Array、 function、Date、RegExp数据类型的特点1.基本数据类型:基本数据类型都存储在栈里,且基本数据类型都是深拷贝。值类型栈存储: 主要针对(Number、String、Boolean)三种数据。直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数

2021-05-24 21:59:26 550

原创 vue-router

一、vue-router路由原理?通过改变 URL,在不重新请求页面的情况下,更新页面视图。二、两种路由模式1.hash模式在浏览器中符号的“#”,以及#后面的字符称之为hash,用window.location.hash读取;特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。hash 模式下,仅 hash 符号之前的内容会被包含在请求中,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。2、his

2021-05-23 21:30:07 56

原创 Vue的生命周期

生命周期是指生物从出生到结束,那么在这每个vue文件,都可以看作成一个实例,从创建到销毁这个过程就是vue的生命周期。大致有八个阶段分别是:实例创建前/后、组件挂载前/后、视图更新前/后、实例销毁前/后。一、实例创建之前/实例创建之后1、beforeCreate()我们vue实例创建之前执行的函数。这个时候只有一些实例本身的事件和生命周期函数2、created()vue实例创建之后执行的函数。是最早能使用data中数据和methods中方法的钩子函数。我们可以在这个钩子中请求数据。二、实例挂

2021-05-23 20:26:21 46

原创 vue组件之间的传值

vue组件通信(父传子、子传父、兄弟组件通信)1、父传子在父组件的子组件标签上绑定一个自定义属性,给这个属性挂载需要传递的值,在子组件中通过props接收传递过来的值,props即可以是一个对象也可以是一个数组。注意:父传子是单向传递,在子组件中修改传递过来的参数是无效的父组件<heads :data="list" />// 比如这是我们注册好的子组件标签<script> export default { data(){ return { list:

2021-05-21 08:57:05 46

原创 使用promise实现uni-app request()封装

使用promise实现uni-app request()接口的封装,只需一下几步:1.在根目录下创建request文件夹,并创建request.js文件,用来封装uni-app request。2.在request.js中进行接口封装module.exports = { request(url,method,data){ return new Promise((resolve,reject)=>{ uni.request({ url:'http://api.intewl.c

2021-05-20 09:54:29 435

原创 小程序发布流程

发布流程,大概分为三个的步骤1.上传代码2.提交审核3.发布版本注意:我们在发布小程序之前,需要配置服务器域名的白名单1、首先是上传代码在我们打开小程序开发者工具,在面板的右上角有一个上传按钮需填写版本号和项目备注,填写完毕,点击上传。如下:上传成功后,要提交审核2、提交审核我们需要大开微信公众平台,即小程序官网登录之后,在左侧导航找到版本管理,点击进入之后,点击提交审核首次发布需要完善基本信息,步骤如下填写小程序信息1.点击填写2.完善基本信息3.添加开发者点

2021-05-17 13:55:31 792

原创 小程序支付流程

首先我们肯定是判断用户有没登录,一般都是判断本地有没有token。如果没有,让用户取登录。如果有,async add() { try { // 1 判断缓存中有没有token const token = wx.getStorageSync("token"); // 2 判断 if (!token) { wx.navigateTo({ url: '/pages/auth/auth' });

2021-05-16 21:50:45 41

原创 小程序获取收货地址流程

小程序获取收货地址第一步:给要点击的按钮绑定点击事件 <view class="address_btn" wx:if="{{!address.userName}}" > <button bindtap="handleAddress" type="warn" plain >获取收货地址</button> </view>第二步:采取封装的方式在js中编写点击事件获得请求在根目录创建文件在address.js文件中编写请求的代码exp

2021-05-16 21:49:12 156

原创 小程序如何写收藏、分享、客服功能

小程序如何写收藏、分享、客服功能一、收藏功能1.收藏功能的是实现是在商品的详情页面给收藏盒子绑定点击事件bindtap=“handleCollect”<view class="shops_right" bindtap="handleCollect" data-item="{{data}}"> <text class="iconfont {{isCollect?'icon-shoucang1':'icon-shoucang'}} icon"></text>

2021-05-16 21:38:23 218

原创 小程序下拉刷新、上拉加载

下拉刷新下拉刷新,简单的来说就是在我们的页面上第一次点进来的数据,然后还有数据未加载出来,下拉刷新,就是向再次接口请求了数据,把页面上已经请求到的数据和刷新后又请求出来的数据拼接到一起,可以利用展开运算符,然后页面进行了再次渲染,有了新的数据,这就是下拉刷新。//1)一般用户的程序中下拉刷新是被禁止的,我们可以先在要刷新页面的Json中添加 “enablePullDownRefresh”:true,2)配置后Json 就开始具体的代码操作data{ lister: [ ], //第一

2021-05-16 21:30:48 258

原创 如何使用Promise封装wx.request()

1、在根目录下创建一个文档,例如创建一个http文档,在文档内写入三个js文件,分别为api.js文件、fetch.js文件以及http.js文件2、在fetch.js中用promise对wx.request()进行封装1 //module.exports=(url,method,data)=>{2 //let p=new Promise ((resolve,reject)=>{3 // wx.request({4 // url:url

2021-05-13 20:38:23 255 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除