chrome117版本隐藏所有标签按钮
chrome117版本更新后标签栏多了一个【所有标签】按钮,相当别扭,通过设置可以隐藏。

浏览器输入url: chrome://flags/#power-bookmarks-side-panel

改成 Disabled 重启浏览器即可。
chrome117版本更新后标签栏多了一个【所有标签】按钮,相当别扭,通过设置可以隐藏。

浏览器输入url: chrome://flags/#power-bookmarks-side-panel

改成 Disabled 重启浏览器即可。
Bitwarden 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息。Bitwarden 平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 提供云端托管服务,并支持自行部署解决方案。
在调研一些市面常用的密码管理工具之后,我选择了 Bitwarden。然后使用自托管的方式部署在服务器上,定时备份数据库,导出密码,安全性也有保证。
而Vaultwarden 是一个使用 Rust 编写的非官方 Bitwarden 服务器实现,提供了不错的 web 管理界面,并与 Bitwarden 兼容。

先在服务器执行指令。
docker run -d --name bitwardenrs \
--restart unless-stopped \
-e WEBSOCKET_ENABLED=true \
-v /data/password/data/:/data/ \
-p 6666:80 \
-p 3012:3012 \
vaultwarden/server:latest部署完成后打开网站,登陆注册之后,删除容器。
需要配置禁止注册的功能,因为我只想自己使用。如果不禁止注册,可以忽略下面这两步。
docker stop bitwardenrs #停止容器
docker rm -f bitwardenrs #删除容器docker run -d --name bitwardenrs \
--restart unless-stopped \
-e SIGNUPS_ALLOWED=false \
-e WEBSOCKET_ENABLED=true \
-v /data/password/data/:/data/ \
-p 6666:80 \
-p 3012:3012 \
vaultwarden/server:latest通过 ChatGPT 我将这段代码转化成了docker-compose.yml 文件,可以更方便的部署安装。

version: '3'
services:
bitwardenrs:
image: vaultwarden/server:latest
container_name: bitwardenrs
restart: unless-stopped
environment:
- SIGNUPS_ALLOWED=false
- WEBSOCKET_ENABLED=true
volumes:
- /data/password/data/:/data/
ports:
- "6666:80"
- "3012:3012"通过反向代理可以使用域名登陆 web 端,并且使用了 chrome 扩展方式,在登陆网站可以自动保存密码。
https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb
之后我只需要记住一个主密码,其他网站密码全部采用加密方式生成,方便与安全并存。
学习vue中一个非常重要的领域,就是生命周期,它包含了很多的内容。每个vue实例在被创建的时候都要经历一系列的初始化过程,这个过程就是vue的生命周期。
每个vue实例在被创建的时候都要经过一系列的初始化过程——例如,需要把设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等,我们要把这一系列的过程称为组件的生命周期(组件从注册到销毁的整个过程)。我们有时候需要在组件生命周期的某个过程中,执行某些代码,基于此,vue提供了生命周期钩子函数,给了用户在不同阶段添加自己的代码的机会。
但是在此之前,我们要详细的介绍下组件的生命周期,以及生命后期中每个阶段组件完成和未完成的部分。
放一张大家都很熟悉的官网文章中对生命周期的注释图。
从图中可以看出,vue为生命周期提供了8个钩子函数,分别是:
beforeCreate在vue实例发生之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
我们在上面的例子中在的beforeCreate钩子中调用Vue的data和method,来看一下结果:
可以看到Vue中的data和方法都是去不到的,并且是在wath之前执行
实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
主要应用:调用数据,调用方法,调用异步函数
console输出的结果我们看一下
可以看到:created钩子可以获取Vue的data,调用Vue方法,获取原本HTML上的直接加载出来的DOM,但是无法获取到通过挂载模板生成的DOM(例如:v-for循环遍历Vue.list生成li)
在挂载开始之前被调用:相关的 render 函数(模板)首次被调用。
例如通过v-for生成的html还没有被挂载到页面上
beforeMount: function () {
console.log('beforeMount:',document.getElementsByTagName('li').length);
},console打印出来的beforeMount为1
el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
有初始值的DOM渲染,例如我们的初始数据list,渲染出来的li,只有这里才能获取
mounted: function () {
console.log('mounted:',document.getElementsByTagName('li').length);
},结果 mounted: 3 , 可以看到到这里为止,挂载到实例上了,我们可以获取到li的个数了
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
当我们更改Vue的任何数据,都会触发该函数
beforeUpdate: function () {
console.log('beforeUpdate 钩子执行.');
console.log('beforeUpdate:'+this.message)
},由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
该钩子在服务器端渲染期间不被调用。
数据更新就会触发(vue所有的数据只有有更新就会触发),如果想数据一遍就做统一的处理,可以用这个,如果想对不同数据的更新做不同的处理可以用nextTick,或者是watch进行监听
updated: function () {
console.log('updated 钩子执行...');
console.log('updated:',this.message)
},实例销毁之前调用。在这一步,实例仍然完全可用。
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。
结果
可以看打到销毁Vue实例时会调用这两个函数
2020年6月14日
我的博客正式建立。
愿一切安好。