js发布订阅
发布-订阅模式,看似陌生,其实不然。工作中经常会用到,例如 Node.js EventEmitter 中的 on 和 emit 方法;Vue 中的 $on 和 $emit 方法。他们都使用了发布-订阅模式,让开发变得更加高效方便。
一、 什么是发布-订阅模式1. 定义发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。
订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布该事件(Publish Event)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
2. 例子比如我们很喜欢看某个公众号号的文章,但是我们不知道什么时候发布新文章,要不定时的去翻阅;这时候,我们可以关注该公众号,当有文章推送时,会有消息及时通知我们文章更新了。
上面一个看似简单的操作,其实是一个典型的发布订阅模式,公众号属于发布者,用户属于订阅者;用户将订阅公众号的事件注册到调度中 ...
RSA数据加解密算法
主要代码:
# /*
# * @Author: kif kif101001000@163.com
# * @Date: 2022-05-30 22:34:47
# * @Last Modified by: kif kif101001000@163.com
# * @Last Modified time: 2022-05-30 22:34:47
# */
import random
import math
# 模N大数的幂乘的快速算法
def fastExpMod(b, e, m): # 底数,幂,大数N
result = 1
e = int(e)
while e != 0:
if e % 2 != 0: # 按位与
e -= 1
result = (result * b) % m
continue
e >>= 1
b = (b * b) % m
return result
# 针对随机取得p,q两个 ...
JS数组reduce()方法详解及高级技巧
reduce()方法可以搞定的东西,for循环,或者forEach方法有时候也可以搞定,那为啥要用reduce()?这个问题,之前我也想过,要说原因还真找不到,唯一能找到的是:通往成功的道路有很多,但是总有一条路是最捷径的,亦或许reduce()逼格更高…
1、语法arr.reduce(callback,[initialValue])
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
callback (执行数组中每个值的函数,包含四个参数)
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
2、实例解析 ...
未读
小程序事件之bind 、catch 、capture-bind和capture-catch的区别
小程序事件之bind 、catch 、capture-bind和capture-catch的区别事件分类事件分为冒泡事件和非冒泡事件
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
事件的绑定:
bind和catch都是用来绑定事件的,与 bind 不同, catch 会阻止事件向上冒泡
<view id="outer" bindtap="handleTap1">
outer view
<view id="middle" catchtap="handleTap2">
middle view
<view id="inner" bindtap="handleTap3">
inner view
</view>
</view>
</view>
上例中,点击 inner view 会先后调用handleTap3和handleTap2(因为tap事件会冒泡到 middle view,而 middle view 阻止了 tap ...
未读
Anim小程序开发框架
Anim小程序开发框架介绍Anim 框架是基于原生小程序 Mina 框架开发的,采用 rollup 打包,只需要引入 anim.js 即可快速使用。
特点:
基于小程序 runtime 的增强型开发框架,无需引入各类编译环境,开箱即用。
可兼容原生使用,无需对项目进行大改,按需使用即可。
补充多种原生小程序开发框架缺失功能,提高大型工程化项目的可维护性,让开发更省心。
引入压缩后的文件大小不到 10 kb。
# 使用# 普通引入通过 CDN 下载后,放置到小程序项目内部任意地方。推荐引入后挂载到 getApp 上,减少重复代码。
下载地址:
anim.js (min 30 kb),下载
anim.min.js (min 10 kb),下载
// app.js
const Anim = require('./lib/anim.js')
App({
onLaunch() {
this.Anim = Anim
}
})
// pages/index/index.js
// 可以使用增强型 Anim.Page
const ...
pyqt5 多个tableWidget联动滚动
项目中遇到了一个需求:
开发时用到了三个tableWidget分别展示数据,但数据过多时三个表就显得比较杂乱,三表行之间无法同时滚动必然带来不好的体验,所以需要是三个tableWidget同时滚动;
先上code:
import sys
from PyQt5.QtCore import QEvent
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHeaderView, QHBoxLayout, QApplication, QTableWidgetItem,
QAbstractItemView)
class MyEvent(QEvent):
# idType = QEvent.registerEventType()
def __init__(self, data):
self.data = data
print("MyEvent.idType ", data)
def get_data(self):
...
未读
Leetcode每日一题
## title:
### time:
### link:
### code:
title:1582. 二进制矩阵中的特殊位置time:9.4code:function numSpecial(mat: number[][]): number {
let count: number = 0;
for (let i: number = 0; i < mat.length; i++) {
for (let j: number = 0; j < mat[i].length; j++) {
if (mat[i][j] == 1 && mat[i].indexOf(1) == j && mat[i].lastIndexOf(1) == j) {
let list: Array<number> = []
mat.forEach(item => {
...
Vue3学习笔记
Vue31.Vite搭建Vue3项目全局安装 Vitenpm install -g create-vite-app
使用 Vite 创建 Vue3 项目create-vite-app vue3-vite
可以发现瞬间创建完成。
运行cd vue3-vite
npm install (or `yarn`)
npm run dev (or `yarn dev`)
vite冷服务
热更新
Rollup打包
2.从VUE2到VUE3新特性Composition API通过创建 Vue 组件,我们可以将界面中重复的部分连同其功能一起提取为可重用的代码段。仅此一项就可以使我们的应用在可维护性和灵活性方面走得相当远。然而,我们的经验已经证明,光靠这一点可能并不够,尤其是当你的应用变得非常大的时候——想想几百个组件。处理这样的大型应用时,共享和重用代码变得尤为重要。
/*
* @Author: kif kif101001000@163.com
* @Date: 2022-05-31 17:22:40
* @Last Modifie ...
webpack学习笔记
学习中。。。
webpack为什么需要Webpack原始开发模式各种js文件引入,顺序不能乱,引入的数据太大,各种js之间有关联,可以考虑所有文件复制到一个js文件里,但又有作用域问题、文件太大、可维护性差
作用域问题:grunt和gulp两个工具来解决
方法:立即执行函数
; (function () {
let myName = 'kif'
})()
console.log(myName)//ReferenceError: myName is not defined
let res = (function () {
let myName = 'kif'
return myName
})()
console.log(res)//kif
文件太大:对于可以js库,只使用其中一个方法而把所有的js文件加载下来不适合
方法:代码差分 commonJs
CommonJS 模块规范代表:Node.js
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
暴露方法:module ...
未读
前端面试题目
html基础1.自定义列表<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<dl>
<dt></dt>
<dd></dd>
<dd></dd>
</dl>
</body>
1.dt中一般是你的列表的表头2.dd中相当于ul的li中相同的内容
自定义列表一般用于以下内容
2.多媒体标签之音频标签音频标签以为代表,音频标签属性如下:autoplay=”autoplay” 打开页面后,音频会自动播放controls=”controls” 在页面显示 ...