javascript - 如何使 Vue 3 插件属性具有反应性?
问题描述
我是制作 Vue3 应用程序的新手。无论它在做什么,我都希望它具有日志记录功能。所以我想制作简单的记录器并提供“日志”功能以在我的应用程序中使用。
所以我在logger.js中写了
class Logger {
constructor() {
this.page_num = 20;
this.logs = this.paginate();
}
paginate() {
let values = [],
keys = Object.keys(localStorage).slice(0, this.page_num),
i = keys.length;
while(i--) {
values.push(
{
time: keys[i],
value: localStorage.getItem(keys[i]),
});
}
return values;
}
log(string) {
let key = (new Date()).toLocaleString("ru-Ru", {timeZone: "Europe/Moscow"});
localStorage.setItem(key, string);
this.logs = this.paginate();
console.log(localStorage);
}
}
export default {
install: (app, options) => {
app.config.globalProperties.$logger = new Logger();
}
}
然后我在app.js中像这样使用它
const myApp = createApp(App)
myApp.use(LoggerPlugin);
myApp.mount('#app')
问题是我希望它在App.vue中具有反应性。并且 $logger.logs (显示 logger 生成的所有日志)不是响应式的,它只加载一次,并且当我尝试在应用程序中显示日志时不会对任何新日志做出反应。
<log-entries-container :logs="$logger.logs"></log-entries-container>
我可以在 Vue 插件中以某种方式使属性日志具有反应性吗?
解决方案
推荐阅读
- java - 使用组合框更改数组的大小
- firebase - 优化 Firebase 并发连接以仅在需要时连接到数据库实例
- swift - 在委托属性方面,符合与向下转换之间有什么区别吗?
- unity3d - 如何在 Unity3d 中删除切片精灵
- python - 查找列表元素的所有组合,包括重复元素
- ubuntu - virtualbox-guest-dkms 和 virtualbox-guest-dkms-hwe 有什么区别?
- ios - 在stackview中动画子视图?
- mysql - SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'
- php - 在 PHP 中嵌套 MySQLi 的正确方法
- azure-media-services - Azure 媒体播放器在悬停或鼠标悬停时显示控件