一、 数组去重的方法
var arr=[1,5,2,1,5,2,3,2,5,3,4]
var temp=[]
for(i=0;i<arr.length;i++){
if(temp.indexof((arr[i])==-1)){
temp.push(arr[i])
}
}
document.write(temp)
首页数据
请求地址:http://47.95.8.3/index.php/home/GK/gettype
请求类型:post
qs转一下
请求参数:name:’newest’ class:‘sell’/ ‘deal’ / ‘buy’
数据详情
请求地址:http://47.95.8.3/index.php/home/GK/getarticle_detail
请求类型:post
qs转一下
请求参数:key:id
二、有10个(a)标签,请写出点击那个A标签,出现那个A标签的下标
var a=document.getElementByTagName("a")
for(var i=0;i<a.length;i++){
a[i].index=i;
a[i].onclick=function(){
alert(this.index)
}
}
三、固定宽高的情况下,图片自适应,高度过高的情况下垂直居中
.box{
width:"500px";
height:"800px";
display:"flex";
background-color:"red";
align-items:"center";
}
.img{
width:"100%";
}
四、简要写一下弹性盒的使用流程
父元素{
display:flex;
justify-content:center
}
子元素{
flex:1;
}
五、解决跨域的问题
vue中在config目录下找到index.js文件
在index.js中找到dev代码块
修改proxyTable:{}内的数据
里面写'^api':''表示rewrite重写。
配置好之后可以直接写/api加上接口名称发送请求。
六、jsonp
在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据,但img、iframe、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。利用script标签的开放策略,我们可以实现跨域请求数据,当然,也需要服务端的配合。当我们正常地请求一个JSON数据的时候,服务端返回的是一串JSON类型的数据,而我们使用JSONP模式来请求数据的时候,服务端返回的是一段可执行的JavaScript代码。
七、 key值得作用
key值表示着具有唯一性,如果不用key,在for循环时,他会拿上面的进行就地复用,加上key的话,每一条数据都有唯一性,防止复用。
八、keep-alive
主要就是保留组件状态或避免重新渲染组件缓存,如果不用他当切换页面是会重新进行缓存页面中的内容,生命周期会重新进行数据缓存和销毁,这样会很好流量,用了之后每次只会调用缓存过得而不会再次去执行生命周期,这样能够提高性能,但是也有缺点,缺点就是当数据多的时候,会比较占内存。
九、promise
promise属于一个构造函数,自身有all、reject、resolve这三个方法
十、什么是事件委托
给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件
十一、捕获和冒泡
1、捕获
就以手机中的软件来说,首先是我们先触碰手机,就是先传给硬件,然后硬件会
传给操作系统,操作系统在传给浏览器,浏览器在传给当前你点击要进入的页面,
页面会传给他里面的body然后在body里面找到你最初点击的地方执行操作,这就
是事件的捕获。
2、冒泡
冒泡就是你处理的那个元素处理完之后他就会向他的父级询问,看看父级中有没有
要处理的事情,如果有就继续进行处理,处理完之后就在向上询问,没有的话也是
向上继续询问,直到询问到最后的window对象。
十二、原型和原型链
1、 原型:
所有引用类型都有一个proto属性,所有函数都有一个prototype属性,所有引用类型的proto属性指向它构造函数的prototype。
2、原型链:
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的proto隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会在构造函数的prototype的proto中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。
十三、websocket
WebSocket是html5提供的基于TCP的通信协议,可以实现服务器和客户端相互的通信。Tcp和udp,TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
十四、作用域
通俗说作用域是能访问到变量或对象的区域,通常这个作用域只是针对局部变量,对于全局变量来说,哪里都可以访问的到。
十五、作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。作用域第一个对象始终是当前执行代码所在环境的变量对象。
十六、闭包
1、闭包的定义:
闭包就是能够读取其他函数内部变量的函数。
2、闭包的缺点:
滥用闭包函数会造成内存泄露,因为闭包中引用的包裹函数中定义的变量都永远不会被释放。
十七、生命周期
1、created
在页面创建的时候调用,只执行一次。
这时页面的dom还未生成,如果在created中执行get将得不到任何数据。
2、mounted
触发顺序为:created->mounted-> activated。
初次渲染时调用,比如v-if=false则表示该组件未被渲染过,
当组件v-if=true初次被渲染的时候,调用mounted函数。
当v-if再次为false时mounted不会再被调用。
3、updated
当组件中有数据发生改变的时候即调用
4、activated
针对keep-alive标签,使用keep-alive在单页面中前进后退只触发activated。
十八、 nextick
在vue里面,数据发生变化时,界面的scrollHeight并没有同步发生改变,意思就是在执行scroll这个动作的时候,界面并没有发生渲染,窗口的高度并没有发生改变,若是,数据一条一条的添加进来,那么滚动条的位置就会是上一条数据的位置,并没有完全滚动到底部,最根本的问题是,它所获取的scrollHeight值是数据添加前的。$nexTick来将事件发生在数据发生改变、界面渲染数据之后。再增加监听事件。
十九、 克隆:
克隆分为深拷贝和浅拷贝,浅拷贝就比如,一个变量a,指向一个数组。拷贝这个a,同样指向那个数组,这样就成了a和b指向同一个数组。深拷贝就是,将a和指向的数组都拷贝一份,这样就有a指向一个数组,b指向另一个数组,不过两个数组的值是相同的。
二十、冒泡算法
function sort(arr){
for(var i=0 ; i<arr.length; i++){
for(var j=0; j<arr.length ;j++){
var temp = []
if(arr[i]<arr[j]){
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
}
var arr = [1,35,8,99,2,3,6,88,56,43]
console.log('排序前'+arr)
//排序前:1,35,8,99,2,3,6,88,56,43。
sort(arr)
console.log('排序后'+arr)
//排序后:1,2,3,6,8,35,43,56,88,99。
二十一、子传父
子组件中用 this.$emit 发送第一个参数是参数名称,第二个参数是要发送的数据
请看下图:
[图片上传失败...(image-e75065-1581302546624)]
在父组件中用v-on监听事件接收
[图片上传失败...(image-41575-1581302546624)]
二十二、父传子
在子组件标签上 :属性名=“传递的参数”
[图片上传失败...(image-475672-1581302546624)]
在子组件中,用props接收一下
[图片上传失败...(image-93ce0e-1581302546624)]
[图片上传失败...(image-c1add1-1581302546624)]
二十三、兄弟传
根据上述,兄弟传值可以子组件A传到父组件 ,父组件再传到子组件B
开发环境下解决跨域
代理:
[图片上传失败...(image-78a8e2-1581302546624)]
浏览器地址去#号
[图片上传失败...(image-5ae2a7-1581302546624)]
设置每个页面的title
[图片上传失败...(image-43c77a-1581302546624)]
[图片上传失败...(image-aee5e4-1581302546624)]
Baseurl
[图片上传失败...(image-fde62d-1581302546624)]
Vue中key,防止重用,防止页面重复渲染
二十四、路由变化页面数据不刷新问题
出现这种情况是因为依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个文章页面并不会运行created组件生命周期,导致文章数据还是第一次进入的数据。
解决方法:watch监听路由是否变化
二十五、异步回调函数中使用this无法指向vue实例对象
<pre style="margin-top:15.75pt;margin-right:0cm;margin-bottom:15.75pt;
margin-left:0cm;mso-line-height-alt:.85pt;mso-pagination:widow-orphan;
word-break:break-all">//setTimeout/setInterval ajax Promise等等</pre>
解决方案 变量赋值和箭头函数
[var和let的区别]
(http://blog.csdn.net/nfer_zhuang/article/details/48781671)
二十六、setInterval路由跳转继续运行并没有及时进行销毁
比如一些弹幕,走马灯文字,这类需要定时调用的,路由跳转之后,因为组件已经销毁了,但是setInterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话,无法及时清除,会导致严重的页面卡顿。
解决办法:在组件生命周期beforeDestroy停止setInterval
<pre style="margin-bottom:15.75pt;mso-line-height-alt:.85pt;mso-pagination:
widow-orphan;word-break:break-all">//组件销毁前执行的钩子函数,跟其他生命周期钩子函数的用法相同。</pre>
[图片上传失败...(image-472e4c-1581302546621)]
二十七、Key
配合for循环使用,当你往下拉的时候,可能会出现第一个渲染的东西,而加上key可以标识唯一,防止重用。
二十八、Vue-cli的原理
首先要下载依赖,然后在config里面配置出入口,局部下载webpack和webpack-cli会自动生成dist文件夹,如果想要边打包边开发的话,需要下载webpack-dev-server,若想要指定文件夹打开的话,就需要在config中更改dev的参数。下载html-webpack-plugin是为了把dist文件夹中存入内存的js文件建立联系。想要实现vue的话,则需要下载vue,然后在config中配置vue,在js中new Vue就可以使用了。
二十九、Vue的原理
最主要的就是双向绑定和组件化,双向绑定则是基于object.defineproperty,里面有两个方法,set和get。Get是用来获取到输入的值,set是用来更改输入的值,然后输出,需要注意的一点是,因为语法是来调用set方法的,所以在set方法中要设置一个临时变量,从而来避免死循环组件化他最大的优点就是重用性,这样可以减少代码量,一个组件可以供多个页面使用。
三十、Vue-router的原理
https://blog.csdn.net/caoxinhui521/article/details/77688512
三十一、微信小程序登录
调用wx.login()获取临时登录凭证code,并返回到开发者服务器调用codeSession接口,换取用户唯一标识openID和秘钥session_key。session_key是对用户数据进行加密的秘钥登录凭证code只能使用一次。
三十二、上传头像
用ajax请求接口,把头像用fromdata来包装一下,将头像上传到服务器,服务器会返回一条url,这个url就是上传到服务器上的图片地址。
三十三、Vue中fifter过滤器
自定义一个fifter的方法,使用的时候直接用{{ XXX | 定义的fifter方法名 }}。
三十四、es6新增的六个特性
Class,export,default,import,promise,字符串模板。
三十五、数组与对象的区别
数组是有序数组,对象是无序数组,但是他们都可以循环遍历
三十六、Webpack打包的工作,并且生成了那些文件
npm i webpack webpack-cli
全局安装过的话就可以直接局部安装,若没有则全局局部都需要安装一遍,会在根目录下面生成一个dist文件夹,里面会有js文件。这个也不是固定的,如果想要改默认生成的文件夹名称或文件名称的话,可以在config中的output更改出口配置
三十七、手写一个完整的组件
<template>
<div></div>
</template>
<srcipt>
export default{
data(){
Return ()
},
created(){}
}
</srcipt>
网友评论