前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >前端的小技巧与黑科技(干货)

前端的小技巧与黑科技(干货)

作者头像
饼干_
发布于 2022-09-19 07:15:07
发布于 2022-09-19 07:15:07
57900
代码可运行
举报
运行总次数:0
代码可运行

前言

面试官:你在xx项目中有哪些亮点或是贡献亦或是小技巧?

我:阿巴阿巴

卡!停一下,你是不是也有相同或者类似的经历?实际大部分同学们多数情况下都是在使用vuereact去实现业务代码,跟业务代码打交道比较多,每当面试官一问起,还真是说不出一二,如果常规回答的话显得过于平庸,倘若是有一二处亮点,也能让面试官刮目相看让成功几率也能高出不少,搞不准因为这一答薪资也跟着上升了。

自动导入文件

假如有如下的js文件需要通过index.js暴露出去,常规做法是一个个引入,但若是更多文件呢?

好家伙,你不会还一个个导入吧?如果你的项目中使用webpack打包,那么你可以利用webpack提供的api require.context。(没有的话就用node的api,相对麻烦点)

require.context是什么?

一个webpackapi,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块。

require.context函数接受三个参数

  1. directory {String} -读取文件的路径
  2. useSubdirectories {Boolean} -是否遍历文件的子目录
  3. regExp {RegExp} -匹配文件的正则

语法: require.context(directory, useSubdirectories = false, regExp = /^.//);

那知道他怎么用的,接下来就开始码起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const files = require.context('.', false, /.js$/)
const obj = {}
files.keys().forEach(key => {
    if (key === './index.js') return
    Object.assign(obj, { ...files(key).default })
    
})
export default apiObj

通过.遍历当前目录下所有的js文件,把除index.js之后的文件一起暴露出去再引入index即可。

前端实现搜索功能

前端同学:这不是你后端做的东西吗?我不干。

后端同学:我没时间,你来实现吧!老板加钱!

前端同学:给我五分钟。

以上内容纯属虚构。

言归正传,比如你使用的是vue实现一个搜索如何做?

首先当然要获取用户输入的内容,根据内容来匹配输出内容。

有思路后开始写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div>
        名字:
        <input v-model='keywords'/>
        <ul>
            <li v-for='(item, key) in search(keywords)' :key='key'>{{ item.name }}</li>
        </ul>
    </div>
</template>
<script>
export default {
    data() {
        keywords: '',
        list: [
            { name: '张三', id: 1 },
            { name: '法外狂徒', id: 2}
        ]
    },
    methods: {
        search(key) {
            let newList = []
            this.list.map(item => {
                if(item.name.indexof(key) !== -1){
                    newList.push(item)
                }
            })
            return newList
        }
    }
}
</script>

打开新窗口监听其关闭然后刷新当前页面

产品:我想从这里跳到那里然后回来的时候这里是最新的,晚上火锅。

我:安排。

首先,将window.open打开的新窗口存到一个变量里,该方法会返回一个对象里面包含closed属性代表打开页面是否关闭。之后我们再利用定时器监听该属性是否变化,然后刷新当前页面并销毁定时器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//打开窗口
window.name = "origin";
var windowObjectReference;
var strWindowFeatures = "width=1000,height=500,menubar=yes,location=yes,resizable=yes,scrollbars=true,status=true";
function openRequestedPopup(url) {
    windowObjectReference = window.open(url, "name", strWindowFeatures);
}
//循环监听
var loop = setInterval(() => {
  if(windowObjectReference.closed) {
     clearInterval(loop); //停止定时器
     location.reload(); //刷新当前页面
  }
}, 1000);

监听storage内的数据

你想监听localstorageseesionstorage内的数据?那你为啥不在框架里监听(如在vue中的watch等)?

emm。。。 我也想,但是前辈留下来的记号太多了。没办法,不然直接watchuseEffect都可以直接实现。

行吧,办法总是有的。

首先查阅资料我们了解到StorageEvent

当前页面使用的storage被其他页面修改时会触发StorageEvent事件。

事件在同一个域下的不同页面之间触发,即在A页面注册了storge的监听处理,只有在跟A同域名下的B页面操作storage对象,A页面才会被触发storage事件。

之后通过initStorageEven来初始化一个storage对象,再派发该对象即可。

通过查阅MDN得知参数。

比如监听sessionStorage:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setStorage(key, val) {
    if(key === 'watch') {
        // 创建一个事件
        var storageEvent = document.createEvent('storageEvent')
    }
    const storage = {
        setItem: (itKey, itVal) => {
            sessionStorage.setItem(itKey, itVal)
            // 初始化事件
            storageEvent.initStorageEvent('setItem', false, false, itKey, null, itVal, null, null)
            // 派发对象
            window.dispatchEvent(storageEvent)
        }
    }
    return storage.setItem(key, val)
}

使用方法: 在A页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setStorage('watch', val)

在B页面即可获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.addEventListener('setItem', () => {
    newVal = sessionStorage.getItem('watch')
})

事件在同一个域下的不同页面之间触发,即在A页面注册了storge的监听处理,只有在跟A同域名下的B页面操作storage对象,A页面才会被触发storage事件。

最后

都看到这里了不点个赞吗?

欢迎大佬们提出建议与想法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
蓝牙API介绍及基本功能实现
通过监听BluetoothAdapter.ACTION_STATE_CHANGED监听蓝牙状态的改变
fanfan
2022/05/07
1.5K0
Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)
在学习BLE的过程中,积累了一些心得的DEMO,放到Github,形成本文。感兴趣的同学可以下载到源代码。 github: https://github.com/vir56k/bluetoothDemo
张云飞Vir
2020/03/16
3.6K0
【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359
韩曙亮
2023/03/27
6.2K0
Android低功耗蓝牙BLE开发小结
BLE是蓝牙4.0标准的一部分,旨在解决传统蓝牙连接慢、能耗大的问题,Google在Android 4.3(API 18)中引入了对BLE的支持。BLE连接使用GAP(Generic Access Profile)协议,通信使用GATT(Generic Attribute Profile)协议。GATT又以ATT为基础,所有的LE服务都以ATT作为应用层协议。以下深入地介绍这两个协议。
fdroid
2018/07/17
5.8K0
Android低功耗蓝牙BLE开发小结
10分钟完成一个最最简单的BLE蓝牙接收数据的DEMO
这两天在研究蓝牙,网上有关蓝牙的内容非常有限,Github上的蓝牙框架也很少很复杂,为此我特地写了一个最最简单的DEMO,实现BLE蓝牙接收数据的问题,
用户3112896
2019/09/26
2.4K0
Android 原生 BLE 开发
Android 开发 BLE 用第三方库是总是出现一些问题,最后还是硬着头皮改回原生 API。 首先看官方文档:https://developer.android.com/guide/topics/connectivity/bluetooth-le 安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。这一优点使android App可以与具有低功耗要求的BLE设备通信,如近距离传感器、心脏速率监视器、健
iOSDevLog
2018/07/04
4.2K0
《Android BLE 开发》--初学者
本作者是一位安卓初学者,之前学过JAVA,安卓只学过三天。《BLE Tool》也是我一个安卓项目,因为作者学习安卓加开发只用了10天时间,目前只是把所有接口打通了,只提供如何怎么实现。有不对的地方,大家多指点。开发之前,最好了解一下BLE的通信原理。最终实现的界面:
Rice加饭
2022/05/09
9610
《Android BLE 开发》--初学者
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
讲解如何通过 UUID 连接蓝牙设备。如果你针对 GATT 服务不太了解。那么这篇应该能够稍微帮助到你。
zinyan.com
2023/07/14
5.9K0
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
Android蓝牙BLE低功耗相关简单总结
在看Android4.42的源码时看到有添加对BLE设备的处理,看的一头雾水,多方百度,终于有种柳暗花明的感觉。
fanfan
2022/05/07
1.1K0
Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)
接《Android BlueToothBLE入门(一)——低功耗蓝牙介绍》上篇,这篇文章主要就是来做Demo实现Android两台设备的数据通讯。
Vaccae
2023/08/22
1.3K0
Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)
Android 低功耗蓝牙开发(数据交互)
  在上一篇低功耗蓝牙开发文章中,我讲述了扫描和连接,本篇文章讲述数据的交互。当了解了数据交互后就可以开始进行低功耗蓝牙硬件和手机App软件相结合的项目,例如蓝牙音箱、蓝牙灯、蓝牙锁等等。
晨曦_LLW
2021/09/10
2.1K0
BLE低功耗蓝牙与经典蓝牙(持续更新)
BLE设备分单模和双模两种,双模简称BR,商标为Bluetooth Smart Ready,单模简称BLE或者LE,商标为Bluetooth Smart。低功耗蓝牙是不能兼容经典蓝牙的,需要兼容,只能选择双模蓝牙。一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯。
木溪bo
2020/03/20
8.9K1
BLE低功耗蓝牙与经典蓝牙(持续更新)
android蓝牙4.0的知识要点
这次主要讲解蓝牙4.0的基本要点,作为自己的备忘录记录下来吧。首先普及一下蓝牙4.0基于Gatt协议来实现。而蓝牙4.0以下的是传统蓝牙,基于socket方式来实现。所以4.0以上的蓝牙具有传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。
HelloJack
2018/08/28
1.1K0
android蓝牙4.0的知识要点
一个Android 蓝牙GATT数据读写的小应用
2、服务特征UUID/读特征UUID 配置特征UUID/写特征UUID,这几个特征UUID 最好是找厂家确认。
呱牛笔记
2024/03/24
3610
Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版
  写这篇文章是因为有读者想看看Kotlin中怎么操作低功耗蓝牙,再加上我也想写一些关于Kotlin的内容,对于低功耗蓝牙的Java版的,我写了两篇,一个是扫描、连接,另一篇就是数据交互,而这篇Kotlin文章我会减少讲解的环节,更多的注重业务逻辑和UI以及Kotlin的语法。
晨曦_LLW
2021/09/23
3.1K0
Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版
Android BLE 快速上手指南
本文旨在提供一个方便没接触过Android上低功耗蓝牙(Bluetooth Low Energy)的同学快速上手使用的简易教程,因此对其中的一些细节不做过分深入的探讨,此外,为了让没有Ble设备的同学也能模拟与设备的交互过程,本文还提供了中央设备(central)和外围设备(peripheral)的示例代码,只需2部手机大家就可以愉快的“左右互搏”了。
蜻蜓队长
2018/12/10
2.6K0
Android BLE 快速上手指南
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
在应用程序清单文件中声明蓝牙权限。 例如: <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
张云飞Vir
2020/03/16
1.9K0
Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
  最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据。   查询了很多资料终于实现,现进行总结。 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 从零开始实现一个连接多个蓝牙4.0 设备并获取数据的 Demo   
听着music睡
2018/05/18
5.3K1
蓝牙开发经验总结
文章部分转自 https://my.oschina.net/oywk/blog/701362 http://www.cnblogs.com/shang53880/p/4624955.html https://github.com/xiaoyaoyou1212/BLE
全栈程序员站长
2022/09/10
9840
蓝牙开发经验总结
Bluetooth4_3运行流程(连接发射器SN00000009)
0,Android帮助文档 android.bluetooth www.pinnace.cn/bluetooth/tech/1940.shtml 此示例代码中有错: 在DeviceControlActivity类内:ExpandableListView.OnChildClickListener 中if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0)的|应该改成& 1,AndroidManifest.xml 2,DeviceScanA
用户1733354
2018/05/22
9600
推荐阅读
相关推荐
蓝牙API介绍及基本功能实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验