使用 Dexie.js 简化访问浏览器本地数据库 IndexedDB
localStorage 本地存储各家浏览器分别限制在 2.5M ~ 10M 之间,本地浏览器需要存储较大数据的时候就不能用了, IndexedDB 就能解决这个问题。
IndexedDB 是存储结构类似 MangoDB 的对象存储数据库,不是关系型数据库。 IndexedDB API 稍微有点麻烦,用 Dexie.js 可简化操作。
使用 Dexie.js 简化访问浏览器本地数据库 IndexedDB
localStorage 本地存储各家浏览器分别限制在 2.5M ~ 10M 之间,本地浏览器需要存储较大数据的时候就不能用了, IndexedDB 就能解决这个问题。
IndexedDB 是存储结构类似 MangoDB 的对象存储数据库,不是关系型数据库。 IndexedDB API 稍微有点麻烦,用 Dexie.js 可简化操作。
在 Vue3 <script setup> + 组合式 API 之 怎用使用响应式变量
Vue3 的响应式是:当更改响应式对象的值改变时,视图会随即自动更新。
ref() 返回一个响应式对象,可以用 value 属性来访问或更改对象的值。ref 对象在模板中会自动解包,用变量名不需要加 .value 就能访问。
1 | <script setup> |
Vue3(单文件组件 + <script setup> + 组合式 API)组件实例常用内置属性、方法、函数
本文总结 Vue3 组件实例在模板中暴露的常用公共属性和方法,以及对应的 组合式 API 函数。
$data/$props/$options 属性在 组合式 API 下几乎用不到。
$el 不建议用。
$slots 表示父组件所传入插槽的一个对象,很少用,有兴趣可查看官方文档。
模板中用 $parent 获取父组件实例,可访问父组件用 defineExpose() 显式暴露的绑定。
组合式 API 先在 setup 中用 getCurrentInstance() 获取到当前组件实例,再用 parent 属性访问父组件。getCurrentInstance().parent 除了能访问父组 defineExpose() 暴漏的绑定外,能访问父组件更多的属性和方法,多用于组件的开发,在应用开发中一般不建议用。
1 | import { getCurrentInstance } from 'vue'; |
Laravel Eloquent 数据库关联模型的增删改操作
Laravel Eloquent ORM 提供了数据模型关联表操作的 API,熟练掌握这些API后,才体会到 Laravel 数据库操作有多高效。
1 | // 新建一条数据 Post 的评论,save 将自动添加 post_id 字段 |
和 save/saveMany 的区别是参数时数组,而不是模型。
JavaScript 原型方法:call、apply、bind
call、apply、bind 是 JavaScript 函数的原型方法,用于改变函数的 this 指向来执行函数。一般这种鬼操作能不用则不用,没得选的时候才有必要用。
1 | const bar = { |
JavaScript 箭头函数与 function 函数的区别
见过箭头函数后,知道箭头函数是 function 定义函数的简写,然后还有一点是箭头函数中的 this 是上级代码的 this。
其实除了这两点外,箭头函数和 function 函数还有很多区别。
1 | // 没有参数时 |
顶级代码中, this 指向 window 对象;function 定义的函数中, this 指向该函数的对象;箭头函数中,箭头函数不会创建自己的 this,始终指向箭头函数所在作用域下的 this。用原型方法 apply()、call()、bind() 不能改变箭头函数中 this 的指向。
1 | const bar = { |
用可变变量访问 JavaScript 类、对象的方法(动态访问 JS 类、对象的方法)
JavaScript中,用可变变量访问对象方法或类静态方法,如果访问的方法中 this,此时 this 将会是 undefined。
用对象解构赋值获得函数名(如:xxx)后,用函数名后面加括号(如:xxx())执行函数,this 也是 undefined。
问题复现:
1 | // 动态访问方法 |
我们知道,一个 js Promise 对象,我们可以用 then()、catch()、finally() 进行链式操作,如:
1 | promiseObj.then((res) => { |
这是 js Promise 的基本使用,但是要用好 Promise,还有一下几个问题需要搞清楚。
Promise 对象Promise 对象创建 Promise 实例Vue3 组件间相互访问(单文件 + <script setup> + 组合式 API 举例)
在 <script setup> 中用 defineProps() 声明组件的属性,在父组件模板中引用子组件时,就可以给通过属性给子组件传参数(可以是值、变量、函数、对象等)。
defineProps是编译器宏,Vue3 编译器宏不需要导入,并且只能在<script setup>中使用。
ex: 子组件声明、调用属性
1 | <!-- HelloWorld.vue 子组件--> |
ex: 父组件使用属性
1 | <!-- Demo.vue 父组件 --> |
用 VueRouter hash 模式时,点击浏览器上的后退按钮,浏览器显示上一次浏览页面的时候,会重新执行页面,像页面刷新一样。
跟微信小程序不一样,微信小程序后退的时候不会重新执行,只是给我们一个
onShow事件,这样如果需要刷新数据,我们就可以在onShow里面解决。