书架

书架

=一个知识书库=

Vue3如何监听localStorage的变化

Vue3如何监听localStorage的变化

### 为什么要这样做? 原生的`localStorage`只能监听同源地址下不同页面的`localStorage`变化,作为单页面应用,显然不实用。所以我打算自定义一个`hook`监听`localStorage`的变化。 ### 思路 首先我们需要重写`localStorage`下的所有方法,这样在每个方法被使用的时候就可以被监听到了。 此时就需要一个事件机制,用于传递消息。 在`Vue3`移除了`$on`、`$emit`事件接口后,我们可以借助第三方库实现:`mitt`、`tiny-emitter`. 不过我打算使用自己实现的`中介者模式`作为通信方法。
more...
中介者模式

中介者模式

## 简介 > Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. > 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 **中介者模式
more...
什么是polyfill

什么是polyfill

`polyfill`的概念:**用于实现浏览器并不支持原生API的代码。** 下面举一个例子:`document.querySelectorAll()`现在大多数浏览器都已经支持该方法,但是仍然存在一些比较老的版本的浏览器不支持该方法,此时如果写一个库,通过对该库的引用,从而使得浏览器可以和其他浏览器一样使用该方法,此时这个库就是`polyfill`。 那么我们要知道`jquery`不知`polyfill`,因为`jquery`主要在封装一些`api`,而`polyfill`的本质是`抹平不同浏览器的api之间的差异,而不是自己实现新的api`。 `已经存在的polyfill` `1、
more...
Object.prototype.toString.call

Object.prototype.toString.call

使用Object.prototype上的原生toString()方法判断数据类型,使用方法如下: ```javascript Object.prototype.toString.call(value) ``` <!--more--> ## 1.判断基本类型: ```javascript Object.prototype.toString.call(null);//”[object Null]” Object.prototype.toString.call(undefined);//”[object Undefined]” Object.prototype.to
more...
PDF 预览和下载你是怎么实现的?

PDF 预览和下载你是怎么实现的?

# 前言 在开发过程中要求对 **`PDF`** 类型的发票提供 **预览** 和 **下载** 功能, **`PDF`** 类型文件的来源又包括 **`H5 移动端`** 和 **`PC 端`** ,而针对这两个不同端的处理会有些许不同,下文会有所提及。 针对 **`PDF 预览`** 的文章不在少数,但似乎都没有提及可能遇到的问题,或是提供对应的具体需求场景下如何选择,因此,本文的核心就是结合实际需求场景下,看看目前各种实现方案到底哪一个更适合,当然希望大家可以在评论区对文中的内容进行斧正,或是提供更优质的方案。 **基本要求:** - 支持 **`pdf 文件
more...