基于vue框架手写一个通知插件实现通知功能的方法

  

简单编写一个vue插件,当点击时触发通知插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间。
  

  

基于vue框架手写一个通知插件实现通知功能的方法

  

  

我们首先初始化一个vue项目,删除不需要的组件和样式,主要针对src下一些初始化资源,有过vue项目基础的应该很容易理解,如果没有vue基础建议先熟悉每个初始化文件的作用。
  

  

关于vue中如何开发插件可以直接看vue官方文档,简单了解插件开发过程,vue插件文档。
  

  

现在我们在src目录下新建一个插件文件夹,里面存放要开发的插件<代码> notify.js

     //notify.js   让通知={//需要在此对象拥有一个安装方法      };   通知。安装=function () {   alert (' tangj ')   }//导出这个对象,如果使用Vue.use()就会自动调用安装方法   出口违约通知;      

然后在主函数导入这个模块并使用

        从“进口通知。/插件/notify.js”   Vue.use(通知)      

运行这个vue项目可以看的到,页面开始加载有一个弹出框,说明我们创建的插件调用成功
  

  

基于vue框架手写一个通知插件实现通知功能的方法

  

  

上面我们知道了,Vue.use()会自动调用安装方法,安装第一个参数为Vue构造函数,第二个参数即为输入的内容,默认未定义,所以我们在调用一开始的时候为Vue这个构造函数的原型上添加一个<代码>通知代码> 执行。
  

  

当然这样还是不够的,回到开头说的,根组件可以设定通知内容和通知延迟时间,相当于给<代码>。美元的通知>   

  

因此,原型上的<代码> 通知函数还得接受两个参数,当有通知内容把通知内容替代,有延迟时间把延迟时间替代,为了插件的完整性,记得要给参数设定默认值。
  

  

总结一下业务逻辑:点击页面需要出现一个通知内容,经过延迟时间后消失,所以我们可以导入一个模块,并把这个模块挂载到页面上,经过相应的延迟时间后移除

        从“进口模态。/notify.vue '   让通知={//需要在此对象拥有一个安装方法      };   通知。安装=function (Vue选项={延迟:3000}){   Vue.prototype。通知美元=function(信息,选择={}){   选择={…选项,选择};//用自己调用插件时传递过来的属性覆盖默认设置的值   让v=Vue.extend(模态);//返回的是一个构造函数的子类,参数是包含组件选项的对象   让vm=new v;   让oDiv=document.createElement (div);//创建一个div将实例挂载到元素上   vm。美元山(oDiv);   vm。值=https://www.yisu.com/zixun/message;   document.body.appendChild (vm。el美元);   setTimeout(()=>{//根据延迟将dom元素移除   document.body.removeChild (vm。el美元);   },options.delay)   }   }//导出这个对象,如果使用Vue.use()就会自动调用安装方法   出口违约通知;      

  

现在还有一个问题,我们不断点击的时候,会通知很多个组件,这显然不符合预期
  

  

基于vue框架手写一个通知插件实现通知功能的方法”> <br/>
  </p>
  <p>解决的办法很简单,我们只要在执行之前判断是否已经存在了这个实例,如果存在直接返回不再继续,如果不存在,那么执行往后的逻辑</p>
  
  <pre类=   通知。安装=function (Vue选项={延迟:3000}){   Vue.prototype。通知美元=function(信息,选择={}){   如果(notify.el)返回;//判断dom上是否存在这个实例   选择={…选项,选择};   让v=Vue.extend(模态);   让vm=new v;   让oDiv=document.createElement (div);   vm。美元山(oDiv);   vm。值=https://www.yisu.com/zixun/message;   document.body.appendChild (vm。el美元);   通知。el=vm。el美元;//把实例给通知对象   setTimeout (()=> {   document.body.removeChild (vm。el美元);   通知。el=零;//清空这个对象   },options.delay)   }   }

基于vue框架手写一个通知插件实现通知功能的方法