初次使用vue开发插件遇到的坑

本文详细介绍了如何在Vue项目中创建并使用自定义插件,包括插件的编写、挂载及调用流程,展示了如何通过插件实现弹窗功能,并深入探讨了插件与组件之间的交互方式。
<style lang="less" scoped>
 .alert{
     background: red;
     position: fixed;
     z-index: 9999;
     width: 100%;
     height: 100%;
     left: 0;
     top:0;
 }
</style>
<template>
 <div class="alert"   v-if="showAlert" @click="this.$alertPlugin.hide">
     <div>你好</div>
 </div>
</template>

<script>
 export default {
     data(){
         return {
        //    showAlert:false,
         }
     },
     created(){
       
     },
     mounted(){
  
     },
     props:{
         showAlert:{
             type:Boolean,
             default:false
         }
     },
    //  watch:{
    //      showAlert(val1,val2){
    //           console.log(val1,'val1>>>')
    //             console.log(val2,'val2>>>')
    //      }
    //  }
 }
</script>


以上这是我随便写的一个页面

下面 是我写的一个插件

import Alert from './alert.vue'
import Vue from 'vue'
let alert = Vue.extend(Alert)
export default {
    install: function() {
        let alertPlugin = new alert({
            methods: {
                show() {
                    console.log('showAlert in plugin', this.showAlert)
                    this.showAlert = true;
                    console.log('showAlert in plugin', this.showAlert)
                },
                hide() {
                    console.log('关闭了')
                    this.showAlert = false;
                }
            }
        });
        alertPlugin.$mount('#app')//开始忘记写这个插件要挂载哪一个元素上了,坑死了。这个地方一定要记得写啊!
        Vue.prototype.$alertPlugin = alertPlugin;//记得把插件挂载到vue实例上,因为我用的是官方提供的第四种方法来写插件的。其他的三种我没用到。用到了在细细的研究。
    }
}

 还有一个最重要的 环节,那就是我用用插件的基本流程啊!

在main.js中引入插件使用插件就ok了。
import alertPlugin from '@/components/bussiness/plugin/alertPlugin.js'
Vue.use(alertPlugin)

使用插件

//你就可以在任意的组件中使用插件的方法了。
 this.$alertPlugin.show()
 this.$alertPlugin.hide()

 

### 使用Vue3进行浏览器插件开发 #### 项目结构概述 对于基于Vue3的浏览器扩展开发,项目的根目录下应当包含`manifest.json`文件用于声明扩展的基本信息和权限。此外,还需设置`content-script`, `background-script`等同类型的脚本文件以实现特定功能。 - **manifest.json**: 描述了整个插件的信息及其所需权限[^1]。 ```json { "manifest_version": 3, "name": "My Vue Extension", "version": "1.0", "action": { "default_popup": "index.html" }, "permissions": [ "activeTab", "storage" ], "background": { "service_worker": "background.js" } } ``` - **Content Script (内容脚本)**: 可以访问网页DOM并执行操作,通常用来增强页面的功能或提取数据[^2]. ```javascript // contentScript.js document.body.style.backgroundColor = 'lightblue'; console.log('This is a message from the content script'); ``` - **Background Script (后台脚本)**: 主要负责处理事件监听和其他长期运行的任务,直接与UI交互[^3]. ```javascript chrome.runtime.onInstalled.addListener(() => { console.log('Extension installed or updated.'); }); ``` #### 创建Vue实例 为了使Vue能够管理弹窗界面或其他HTML元素,在对应的入口文件(`popup/index.js`)中初始化Vue应用: ```javascript import { createApp } from 'vue' import App from './App.vue' const app = createApp(App); app.mount('#app'); // 将Vue实例挂载到指定的选择器上 ``` #### 生命周期 Hooks 和调试技巧 利用Vue3提供的组合式API(composition API),可以在同的生命周期阶段定义逻辑。例如,在组件被首次加载触发某些行为: ```javascript <script setup> import { onMounted, ref } from 'vue'; let count = ref(0); onMounted(() => { chrome.tabs.query({ active: true }, function(tabs){ const tabId = tabs[0].id; console.debug(`Current Tab ID:${tabId}`); }); }) </script> <template> <button @click="count++">You clicked me {{ count }} times.</button> </template> ``` 当遇到问题时,可以通过Chrome DevTools查看控制台日志、网络请求情况等来进行调试;也可以借助官方文档获取更多关于错误排查的帮助。 #### 发布流程 完成本地测试之后,按照以下步骤发布至Chrome网上商店: 1. 打包所有源码成.zip格式; 2. 登录Google Chrome开发者仪表板上传ZIP压缩包; 3. 提交审核等待批准后即可上线供用户下载安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值