vue双向绑定原理:
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的
Object.defineProperty()来实现数据劫持,对应的两个描述属性get和set
例子:
1. 将实例中的data中的内容绑定到输入框以及文本节点当中
2. 当输入框改变时,vm实例中的data的内容也跟着改变
3. data中的内容发生变化的时候,输入框的内容以及文本节点的内容也发生 变化
v-show和v-if区别:
v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置 DOM元素 的display样式
vue生命周期:
beforeCreate 创建之前
create 创建成功
beforeMount 开始加载
mounted 加载成功
beforeUpdate 开始更新
updated 更新完成
beforeDestroy 销毁之前
destroyed 销毁完成
组件通信:
props 父传子
events 子组件向父组件发送数据
$emit/$on 通过空的实例实现组件间的通信
路由传参:
两种情况:params 和 query
都可以在目标组件的生命周期里,通过 this.$route 进行获取
Vuex:
vuex 是 vue 的状态管理器,存储的数组数据是响应式的。但是并不会保存 起来,刷新之后就回到了初始状态,组件间的状态共享: 登录状态
组件间的数据共享: 购物车的数据, 登录的token
修改Elment样式
1.使用 /deep/ 深度修改标签样式
2.添加一个新的style标签不添加scoped属性
3.通过内联样式 或者 绑定类样式覆盖默认样式
4.在静态资源文件夹的style文件夹下新建global.css文件,并在 main.js 中 引入。
computed:
某些数据依赖其他数据进行变动时使用,当data中数据没有发生改变时,我 们调用 computed中函数n次,会进行缓存(执行一次)
watch:
监听机制+事件机制,数据变化的同时进行异步操作或者是比较大的开销时 使用
let conset var区别:
var会导致变量泄露,会全局污染
let块级作用域,不会全局污染
const也是块级作用域,声明的常量,值不能改变
箭头函数:
箭头函数是匿名函数,不能作为构造函数,不能使用new
箭头函数没有原型属性
箭头函数内没有arguments,可以用展开运算符...解决
箭头函数的this,始终指向父级上下文(箭头函数的this取决于定义位置父 级的上下文, 跟使用位置没关系,普通函数this指向调用的那个对象
this指向的方法:
函数的调用方式决定了 this 的指向不同
普通函数调用,this 指向 window
构造函数调用, this 指向 实例对象
对象方法调用,this 指向 该方法所属的对象
事件绑定的方法,this 指向 绑定事件的对象
更改this指向的三个方法:
call() 方法、
apply() 方法、与call()非常相似,不同之处在于提供参数的方式,
apply()使用参数数组,而不是参数列表
bind()方法 创建的是一个新的函数(称为绑定函数),与被调用函数有相同 的函数体, 当目标函数被调用时this的值绑定到 bind()的第一个参数上
Get、Post:
GET 请求指定的页面信息,并返回实体主体
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数 据被包含在请求体中。POST请求会导致新资源的建立/或已有资源的修改。
Get、Post区别:
请求缓存:GET 会被缓存,而post不会
收藏书签:GET可以,而POST不能
保留浏览器历史记录:GET可以,而POST不能
用处:get常用于取回数据,post用于提交数据
安全性:post比get安全
跨域:
跨域是 浏览器 为了安全而作出的限制策略(服务端不涉及到跨域);
浏览器请求必须遵循同源策略,即同域名、同端口、同协议;
解决跨域:
1.CORS跨域 (前端不用动,后端设置Access-Control-Allow-Origin等)
2. JSONP (动态创建script标签)前端适配,后端配合 前后端同时改造
3. 接口代理 通过修改nginx服务器配置实现代理转发,前端修改,后端不 用
垃圾回收机制:
负责管理代码执行过程中使用的内存。垃圾收集器会定期(周期性)找出那 些不在继续使用的变量,然后释放其内存
闭包:
声明在一个函数中的函数,叫做闭包函数
让外部可以访问内部函数变量;
局部变量会常驻在内存中;
可以防止全局变量污染;
会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
MVC:
MVC是 模型(model)-视图(view)-控制器(controller)是一种软件设计典范
控制器接受用户的输入并调用模型和视图去完成用户的需求
MVVM:
是Model-View-ViewModel的缩写。View层是视图层-Model层是指数据模型 -ViewModel 层是视图数据层,一个同步View和Model的对象,MVVM是一 种设计思想。ViewModel通过双向数据绑定把View层和Model层连接起来
双向数据绑定:
用户更新了view,Model的数据也自动被更新了,这种情况就是双向绑定
viewModel(业务逻辑层)负责将数据于视图关联起来实现数据变化后更新视 图,视图变 化后更新数据,它两个主要部分 :监听器和解析器
axios:
特性:
从浏览器中创建 XMLHttpRequests
从 node.js 创建 http请求
支持 Promise API
拦截请求和响应
转换请求数据和响应数据
取消请求
自动转换JSON 数据
客户端支持防御XSRF
封装:
先引入,在要调用的接口重新封装成一个方法暴露出去,把封装的方法 放 在一个api.js文件中,页面就能直接引入,使用方法名调用
Key的作用:
减少DOM的操作 提高效率
javascript:
有三部分构成,ECMAScript,DOM和BOM
DOM:是W3C 的标准是为了操作文档出现的API,document是其一个对象
BOM:是为了操作浏览器出现的 API,window 是其的一个对象
虚拟DOM:
虚拟 DOM 为框架带来了跨平台的能力,实际上它只是一层对真实DOM的 抽象,以 JavaScript 对象作为基础的树,用对象的属性来描述节点,最终 可以通过一系列操作使 这棵树映射到真实环境上
SPA首屏加载:
浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间
导致加载速度慢的因素:
网络延时问题
资源文件体积过大
资源重复发送请求
加载脚本的时候,渲染内容堵塞
常见的SPA首屏优化方式:
减小入口文件积
静态资源本地缓存
UI框架按需加载
图片资源的压缩
组件重复打包
开启GZip压缩
使用SSR
Vue缺点:
1、不支持IE8.0及其以下版本;
2、高阶教程少;
3、生态环境不如其他框架;
4、社区不大;
Vue优化:
1、路由懒加载
2、key保证唯一性
3、去掉编译文件中的 map 调试文件
4、服务端渲染ssr
5、尽量使用轻量级的工具库
6、很多情况下使用v-if替代v-show
7、按需引入需要用到的组件
8、不要写行内样式,避免dom重绘
9、使用 CDN 引入第三方库减少服务器压力
10、SPA页面采用keep-alive缓存组件
11、开启 gzip 打包压缩 后台配合 gzip 访问
12、对于短时间的大量操作(缩放、滚动)使用防抖、节流函数
13、代码精简,去除 console ,可复用的方法、组件提取出来