技术标签: 前端 vue.js javascript
Mvvm:
Model 指的是后端传递过来的数据
View 指的是所看到的页面
ViewModel 指的是连接模型和视图
MVVM的目标和思想MVP类似它是一种双向数据绑定的模式,用viewModel来建立起model数据层和view视图层的连接,数据改变会影响视图,视图改变会影响数据
Mvc:
MVC即model-view-controller(模型-视图-控制器)是项目的一种分层架构思想,它把复杂的业务逻辑,抽离为职能单一的小模块,每个模块看似相互独立,其实又各自有相互依赖关系。它的好处是:保证了模块的智能单一性,方便程序的开发
vue.js 是采用数据劫持 结合 发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调
1.介绍生命周期的类别:
vue 实例从创建到销毁的过程就是生命周期。
常见的四大阶段八大钩子函数
beforeCreate / created
beforeMount / mounted
beforeUpdate / updated
beforeDestroy / destroyed
另外三个生命周期函数不常用
keep-alive 主要用于保留组件状态或避免重新渲染。
activated只有在keep-alive 组件激活时调用。
deactivated只有在keep-alive 组件停用时调用。
在加载一个组件后:
如果没有keep-alive,则经历前面四个阶段即beforeCreate到mounted
有keep-alive,分第一次和第二次,第一次加载五个阶段即前面四个加上activated
第二次则只有activated
V-if是“真正”的条件渲染,操作的实际上是dom元素的创建或者销毁
V-show,不管初始条件,元素总被渲染,基于css切换,操作的是display里面的none或者block属性
v-if 有更高的切换开销,而v-show有更高的初始渲染开销。
因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用v-if
async与 await 可以理解为generate的语法糖,它的作用就是 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。它可以很好的替代promise 中的then
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。当函数执行的时候,一旦遇到await 就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
增删操作
增:
Unshift( ) 将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)
Push ( ) 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度
删:
Shift ( ) 从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
Pop ( ) 从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度
Splice ( ) 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组
其他常用操作
IndexOf ( ) 在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
Findindex ( ) 数组中满足提供的测试函数的第一个元素的索引。否则返回-1
Find ( ) 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined
Concat ( ) 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组
Join ( ) 将数组所有元素拼接成一个字符串并且返回这个字符串
Reverse ( ) 将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组
Sort ( ) 对数组的元素进行排序,并返回数组
Includes ( ) 判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否
则返回false
Reduce ( ) 可以进行累加,求最大最小值
Filter ( ) 数组的筛选
ForEach ( ) 数组循环
Every ( ) 用于判断全部满足才可,一假则假
Some ( ) 用于判断只需满足一个即可,一真则真
Every ( ) 测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值
Some ( ) 测试一个数组内的至少有一个是否都能通过某个指定函数的测试。它返回一个布尔值
ForEach ( ) 对数组的每个元素执行一次提供的函数
Filter ( ) 创建一个新数组,通过提供的函数测试所有元素
Concat ( ) 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组
Includes ( ) 判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否
则返回false
IndexOf ( ) 在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
Match ( ) 方法检索返回一个字符串匹配正则表达式的的结果
Replace ( ) 进行替换
Slice ( ) 方法提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串
Split ( ) 分割符,对数组进行分割
Substr ( ) 返回一个字符串中从指定位置开始到指定字符数的字符
每一个实例对象上面都有proto属性,指向的构造函数的原型对象
构造函数的原型对象也是一个对象,也有proto属性,这样一层层往上面找的过程就形成了原型链
1.性能更高
响应式的原理换成了Proxy
VNode Diff算法进行了优化
按需引入,能配合Webpack支持tree shaking
删除EventBus filter
组合API,把同一功能的数据和处理数据的业务逻辑组合在一起
Vue2对于小型项目一目了然,很适合上手
Composition API 对于大型的项目更加方便维护和复用
5.新增加了一些特性(Fragment,Suspense,Teleport )
使用RBAC权限管理
主体操作是给角色分配权限,给人员分配角色
1.页面权限:
当用户通过验证登录验证后,服务端会返回一个token,拿到token后,将其存在cookie中,根据token去拉取用户的信息(如用户的权限)
动态根据用户的权限计算出其对应的权限路由,可使用includes,并通过router.addRoutes动态挂载这些路由
2.按钮权限
使用全局的自定义指令,无则删除
2015年推出
绑定了key值vue就清楚你修改的是哪个dom,直接对该dom进行修改即可,大大提高了效率
每个组件都是 Vue 的实例。组件共享 data 属性,当 data 的值是同一个引用类型的值时,改变其中一个会影响其他
通过配置vue.config.js中的devServer的proxy选项来进行处理
2.CORS:
跨域资源共享(CORS)是一种机制;当一个资源访问到另外一个资源(这个资源放在不同的域名或者不同的协议或者端口),资源就会发起一个跨域的HTTP请求需要浏览器和服务器同时支持;
Cookie是网站为了标示用户身份而储存在用户本地终端上的数据(通常经过加密)
sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存
cookie 数据根据不同浏览器限制,大小一般不能超过 4k
sessionStorage 和 localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M
localStorage存储持久数据,浏览器关闭数据不丢失
sessionStorage浏览器窗口关闭后数据自动删除
ookie 设置的cookie过期时间之前一直有效,与浏览器是否关闭无关
如果一个函数在内部可以调用其本身,这个函数就是递归函数
简单点来讲:函数内部自己调用自己
优点:
结构清晰,可读性强
缺点:
效率低,调用栈可能会溢出
Vue实例挂载在body标签上,vue中获取不到body,只能通过原生方式
浅拷贝:
就是创建一个新的对象,这个对象有原始对象属性值
如果属性是基本类型则拷贝基本类型的值,引用类型则拷贝的是内存地址
深拷贝:
将一个对象从内存中完整拷贝一份出来,在堆内存中开辟一个新的区域存放对象
区别:
浅拷贝中有一个对象改变了地址,会对另外一个影响
深拷贝中不会相互影响
js是一个单线程,异步,非阻塞I/O模型,event loop事件循环的执行机制
其中事件循环为,同步先于异步执行,将满足条件的异步任务从事件对象中依次取出,放到主线的执行栈中依次执行
lodash是一个模块化,高性能的js工具库
_.cloneDeep 深度拷贝
_.reject 根据条件去除某个元素
_.drop(array , [ n=1 } )作用,将array中的前n个元素去掉,返回剩余部分
Get post put delete
Webpack,模块化打包工具,有对应的模块加载器,会分析模块间的依赖关系,最后生成了优化且合并后的静态资源
Babel帮我们转换一些当前浏览器不支持的语法,将语法转换为低版本的语法
都是es6提供的一种新的数据结构
Set类似于数组,但是成员的值都是唯一的
Map类似于对象,也是键值对的集合,各种类型的值都可以当做键,map结构提供了只于值的对应
为什么要清除浮动,因为浮动的盒子脱离了标准流,如果父盒子没有设置高度,下面盒子会撑上来
浮动:
兼容性好
脱离标准文档流,需要清除浮动
绝对定位:
快
子元素脱离标准文档流,实用性差
Flex布局
移动端推介使用
网格布局
栅格系统布局
延迟加载,指的是在长网页中延迟加载图像
懒加载的原理:
首先将页面上图片的src属性设置为空字符串,真实路径设置在data original属性中,页面滚动的时候监听scroll事件,如果懒加载图片进入到了可视区域,则将data original上的值赋值给图片的src,实现懒加载
Computed用于监控自己定义的变量,该变量不在data里面声明,在computed里面定义
Watch主要监控vue实例的变化,该变量必须在data里面声明
计算属性不能执行异步任务,必须执行同步任务,遇到异步任务则需要交给侦听属性
父向子传值主要是通过props属性来传值
子向父传值主要是通过$emit
兄弟之间的传值是通过事件总线evenBus
Vuex就是将各个组件公用的数据放到了一个仓库里面统一进行管理,是一个为vue.js设计的数据仓库
Vuex解决了各个组件之间传值的复杂和混乱的问题
1.将共享的数据放在state中
2.Mutation改变state中的数据,但是只能进行同步的操作
3.Action进行异步操作,提交到mutation中,通过mutation改变state中的数据
4.Module模块化管理
5.需要获取或者格式化数据使用getters
1.typeof
使用简单,但只能检测出基本类型
2.instanceof
能检测出引用类型,但是不能检测出基本类型,且不能跨iframe
3.constructor
基本能检测所有的类型(处理了null和undefined),但是constructor易被修改,也不能跨iframe
4.Object.prototype.toString.call
检测出所有的类型,但是在IE6下面,undefined和null均为Object
在ES6中引入新的原始数据类型Symbol。表示独一无二的值
Es6中的class可以将它看成是es5中构造函数的语法糖,它简化了构造函数的写法
Class的实例必须通过new关键字
在类的内部可以使用get和set关键字
标准盒子模型:
Width和height指的是内容区域的宽度和高度,增加内边距,边框,外边距不会影响内容区域的尺寸
IE盒子模型:
Width和height指的是内容区域 +bording和padding的宽度和高度
Promise是异步编程的一种解决方案
能够解决回调地狱的问题,也就是异步深层嵌套问题
是一个对象
New来创建一个promise ,promise的构造函数接收一个参数,传入两个参数resolve ,reject分别表示异步操作执行成功后和失败后的回调函数
3.0把配置webpack的文件隐藏了,如果需要配置它则需要创建一个vue.config.js文件
箭头函数没有自己的this
箭头函数不能new,会报错
箭头函数没有prototype
1.点击事件300MS延迟问题 解决方案:下载fastclick的包
2. H5页面窗口自动调整到设备宽度,并禁止用户缩放页面
3.忽略Android平台中对邮箱地址的识别
<meta name="format-detection" content="email=no">
Get参数在url后面拼接(请求行)
Post参数在请求体中发送
Get有大小的限制,一般2-5mb
post没有大小限制(文件上传)
Get传输的速度快
Post传输的速度慢
Get安全性低
Post安全性高
所谓同源策略就是浏览器的一种安全机制,来限制不同源的网站不能通信
同源就是域名,协议,端口都是一致的
1开头表示http请求已经接收,继续处理请求
2开头表示请求已经处理完成
3开头表示把请求访问的url重定向到其他目录
4开头表示客户端出现错误
Bfc(块级格式化上下文),一个创建了新的bfc的盒子是独立布局的,盒子内元素与的布局不会影响盒子外面的元素
1.Token可以称为令牌,一般由uid time sign 加固定参数组成
uid: 用户唯一身份标识
time: 当前时间的时间戳
sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查
2.token在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中
3.客户端登陆传递信息给服务端,服务端收到后把用户信息加密(token)传给客户端,客户端将 token存放于localStroage等容器中。客户端每次访问都传递token,服务端解密token,就知道这个用户是谁了
String number boolean null undefined symbol
Array object function
构造对象通过prototype指向原型对象,解决资源浪费和变量污染
原型对象通过constructort指向构造对象, 让实例对象知道自己被哪个构造函数创建
实例对象通过proto指向原型对象,让实例对象访问原型中的成员
在这三个之中可以将实例对象那比喻成儿子,原型对象是实例的妈妈,构造函数是实例对象的父亲
所有对象的原型链最终都是指向object.prototype 万物皆对象
而对象object.prototype最终指向null 万物皆空
CSRF需要用户先登录网站A,获取到cookie
XSS不需要登录
原理上:
CSRF是利用网站A本身的漏洞,去请求网站A的api
XSS是向网站A注入js代码,执行js代码,篡改网站A的内容
Cookie和Session都用于存储信息。它们最主要的区别在于Cookie存储在客户端计算机上,而Session则存储在服务器上
cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用session。
闭包是函数加上上下文的引用 ,或者可以说是闭包是一个访问其他函数内部变量的一个函数
闭包的作用?闭包解决变量污染
相同点:都可以改变this指向
不同点:
1.传参的方式不同
Call是逐一传参,apply传的是数组或者伪数组
2.执行机制不同
Call和apply是立即执行,bind不会立即执行
Call和apply用一次修改一次
Bind修改一次可以一直使用
有不足的地方欢迎指正,喜欢的话给个赞吧!!!
文章浏览阅读2.6k次。解决Python词云库wordcloud不显示中文的问题2018-11-25背景:wordcloud是基于Python开发的词云生成库,功能强大使用简单。github地址:https://github.com/amueller/word_cloudwordcloud默认是不支持显示中文的,中文会被显示成方框。安装:安装命令:pip install wordcloud解决:经过测试发现不支持显示中文..._词云python代码无法输出文字
文章浏览阅读807次。扩展。_jmap 在线分析
文章浏览阅读1.1w次。随着炎热夏季的到来,当玩游戏正爽的时候,电脑突然死机了,自动关机了,是不是有想给主机一脚的冲动呢?这个很大的原因是因为CPU温度过高导致的。很多新手玩家可能都有一个疑虑,cpu温度多少以下正常?有些说是60,有些说是70,到底多高CPU温度不会死机呢?首先我们先看看如何查看CPU的温度。下载鲁大师并安装,运行鲁大师软件,即可进入软件界面,并点击温度管理,即可看到电脑各个硬件的温度。鲁大师一般情况下..._台式机玩游戏温度多少正常
文章浏览阅读243次。Day2-打印打印打印!我终于更新了!(哭腔)一、 最简单的打印最最简单的打印语句: print(“打印内容”)注意:python是全英的,符号记得是半角下面是我写的例子:然后进入power shell ,注意:你需要使用cd来进入你保存的例子的文件夹,保存时名字应该取为xxx.py我终于知道为什么文件夹取名都建议取英文了,因为进入的时候是真的很麻烦!如果你没有进入正确的文件夹..._puthon打印任务收获
文章浏览阅读1k次。centos8问题参考CentOS 8 EOL如何切换源? - 云服务器 ECS - 阿里云_"cenerrors during download metadata for repository \"appstream"
文章浏览阅读2.7k次,点赞3次,收藏11次。SpringBoot+Maven+MabatisPlusmaven在新建springboot项目引入RELEASE版本出错maven在新建springboot项目引入RELEASE版本出错maven详解maven就是通过pom.xml中的配置,就能够从仓库获取到想要的jar包。仓库分为:本地仓库、第三方仓库(私服)、中央仓库springframework.boot:spring-boot-starter-parent:2.2.1.RELEASE’ not found若出现jar包下载不了只有两_基于微服务的在线教育平台尚硅谷
文章浏览阅读316次。路由的概念路由器它称之为网关设备。路由器就是用于连接不同网络的设备路由器是位于OSI模型的第三层。路由器通过路由决定数据的转发。网关的背景:当时每家计算机厂商,用于交换数据的通信程序(协议)和数据描述格式各不相同。因此,就把用于相互转换这些协议和格式的计算机称为网关。路由器与三层交换器的对比路由协议对比路由器的作用:1.路由寻址2.实现不同网络之间相连的功能3.通过路由决定数据的转发,转发策略称为 路由选择。VLAN相关技术什么是VLAN?中文名称叫:虚拟局域网。虚_路由和vlan
文章浏览阅读2.8w次,点赞6次,收藏22次。设置div背景颜色透明度,内部元素不透明:.demo{ background-color:rgba(255,255,255,0.15) } 错误方式:.demo{ background-color:#5CACEE;opacity:0.75;} 这样会导致div里面的元素内容和背景颜色一起变透明只针对谷歌浏览器的测试_div设置透明度,里面的内容不透明
文章浏览阅读563次。1.[ u]文字:在文字的位置可以任意加入您需要的字符,显示为下划线效果。2.[ align=center]文字:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。5.[ color=red]文字:输入您的颜色代码,在标签的中间插入文字可以实现文字颜色改变。6.[ SIZE=数字]文字:输入您的字体大小,在标签的中间插入文..._discuzcode 大全
文章浏览阅读2.6k次。iOS中定时器有三种,分别是NSTimer、CADisplayLink、dispatch_source,下面就分别对这三种计时器进行说明。一、NSTimerNSTimer这种定时器用的比较多,但是特别需要注意释放问题,如果处理不好很容易引起循环引用问题,造成内存泄漏。1.1 NSTimer的创建NSTimer有两种创建方法。方法一:这种方法虽然创建了NSTimer,但是定时器却没有起作用。这种方式创建的NSTimer,需要加入到NSRunLoop中,有NSRunLoop的驱动才会让定时器跑起来。_ios nstimer
文章浏览阅读4.8k次,点赞17次,收藏51次。Linux的命令有几百个,对程序员来说,常用的并不多,考虑各位是初学者,先学习本章节前15个命令就可以了,其它的命令以后用到的时候再学习。1、开机 物理机服务器,按下电源开关,就像windows开机一样。 在VMware中点击“开启此虚拟机”。2、登录 启动完成后,输入用户名和密码,一般情况下,不要用root用户..._ls-lmore
文章浏览阅读4.1k次。1.登录MYSQL系统命令打开DOS命令框shengfen,以管理员的身份运行命令1:mysql -u usernae -p password命令2:mysql -u username -p password -h 需要连接的mysql主机名(localhost本地主机名)或是mysql的ip地址(默认为:127.0.0.1)-P 端口号(默认:3306端口)使用其中任意一个就OK,输入命令后DOS命令框得到mysql>就说明已经进入了mysql系统2. 查看mysql当中的._mysql -u user