• vue----自己封装组件,非父子组件传值$on,$emit,$off


    采用观察者模式
     
      $on   $off  $emit
     
         $on:绑定事件
    绑定事件,一个事件名称上面可能绑定多个函数
    $on("事件名称",回调函数)
    事件名称与函数之间的关系:key:[]
      $emit:触发事件
    触发事件时,需要触发当前事件身上所有的函数
    $emit("事件名称",[需要传递的值])
      $off:解绑事件    
     
     $off("事件名称")  解绑全部函数
    $off("事件名称",需要解绑的函数)
    如果没有传递第二个参数,则解绑所有的事件对应的函数 如果传递了第二个参数,则解绑指定的函数
     

    业务逻辑

     
    $on:
    1.首先判断当前事件名称是否存在, 如果事件名称存在,则直接将当前函数push到当前数组中去 如果事件名称不存在,则创建一个数组,再将当前函数push到数组中
    $emit: 1.判断当前事件名称是否存在, 如果不存在,则什么都不干,直接return 如果存在,则获取当前事件名称所对应的所有函数,遍历执行 2.如果第二个参数存在,调用函数时,将第二个参数传递进去
    $off: 1.首先判断当前事件名称是否存在 如果不存在,直接return 如果存在,则判断第二个参数是否存在 如果存在,则将这个函数从数组中移除 如果不存在,则直接将数组清空
     

    代码实现observer.js

     
    let EventList = {
      //事件名称与事件函数的关系key:[] //key:[] } const $on = (EventName,cb)=>{   //判断事件名称是否存在 if(!(EventList[EventName])){     //事件名称不存在,则创建数组 EventList[EventName] = []; }
      //将事件名称对应的函数push到数组中 EventList[EventName].push(cb); } const $emit = (EeventName,params)=>{
      //判断事件名称是否存在,不存在,直接return if(!EventList[EeventName])return;   //事件名称存在,获取当前事件名称对应的所有函数,遍历执行 let EventLists = EventList[EeventName];
      //遍历事件名称所对应的函数 EventLists.map((cb)=>{
        //判断是否传值,执行对应的函数 params?cb(params):cb(); }) } const $off = (EventName,callback)=>{
      //判断事件名称是否存在,若存在 if(EventList[EventName]){ let EventListsOff = EventList[EventName];
        //判断第二个参数是否存在,如果存在 if(callback){
            //将其从数组中移除 EventList[EventName] = EventListsOff.filter((cb)=>{ return cb != callback; }) }else{
            //第二个参数不存在,直接将数组清空 EventList[EventName].length = 0; } } } export default { $on, $emit, $off }
  • 相关阅读:
    gridview的应用(删除)
    Javascript无刷新TreeView
    利用GridView显示主细表并添加打开、关闭功能
    UpdatePanel 控件简介
    Asp.net中使用fckeditor在线编辑器配置
    C#实现水晶报表绑定数据并实现打印
    Asp.net 2.0 Treeview 动态填充,并实现无限级树
    SQL数据库建表前期优化
    C#发送Email邮件方法总结
    ASP.NET防SQL注入脚本程序
  • 原文地址:https://www.cnblogs.com/a1411305006/p/11125850.html
Copyright © 2020-2023  润新知