项目小手段

98 阅读2分钟

重定向组件

重新定向到Home组件,多于用退出时,使其直接登陆到页面的首页

image.png

防抖

前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续快速的触发,只会执行一次
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>
    
</head>
<body>
    <p>
        请你输入搜索的内容:<input type="text">
    </p>
</body>
<script>
    let input = document.querySelector('input');
    input.oninput = _.debounce(function(){
        console.log('ajax请求')
    },1000);
    //lodash插件:里面封装函数的防抖与节流的业务【闭包和延迟器】
</script>
</html>

节流

在规定的间隔时间范围内不会重复触发回调函数,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.js"></script>
</head>
<body>
    <div>
        <h1>我是计数器<span></span></h1>
        <button @onclick="">点击我加1</button>
    </div>
</body>
<script>
    let span = document.querySelector('span');
    let button = document.querySelector('button');
    let count = 0
    // 计数器,在一秒以内,数字只能加一
    button.onclick = _.throttle(function(){
        // 节流:目前这个回调函数5秒执行一次,
        // 假如这里面有很多的业务代码,可以给浏览器很充裕的事件去解析
        count ++;
        span.innerHTML = count;
        console.log('执行一次')
    },1000);
</script>
</html>

总结:防抖:用户操作很频繁,但是只是执行一次。节流:用户操作很频繁,但是把频繁的操作变为少量操作【可以给浏览器有充裕的时间去解析代码】,都是通过闭包+延迟期去实现

项目里面为什么要对axios进行二次封装?

请求拦截器,响应拦截器
请求拦截器,可以在发请求之前可以处理一些业务
相应拦截器:当服务器数据返回以后,可以处理一些事情

跨域问题

什么是跨域

    1.协议,域名,端口号不同请求,称之为跨域
    2.解决跨域问题的三种方式:JSONP,CROS,代理

解决轮播图问题

项目中日引入swiper插件,使用watch+nextTick的方式来实现轮播图
$nextTick:在下次DOM更新 循环结束之后 执行延迟回调函数。在 修改数据之后 立即使用这个方法,获取更新之后的DOM
$nextTick:可以保证也页面中的结构一定是有的,经常和很多插件一起使用【都需要DOM存在】

获取数据

切记:仓库当中的数据格式:数据的格式取决于服务器返回的数据

组件通信的方式有哪些?

1.props:用于父子组件通信
2.自定义事件:@on @emit 可以实现子给父通信
3.全局事件总线:$bus 全能
4.pubsub-js:vue当中几乎不用 全能
5.插槽
6.vuex