国产女主播成人av-亚洲国产精品黑人久久久-欧美日韩一区二区三区gif-91综合久久噜久久-国产日韩欧美在线观看大片-国产一区二区三区御姐-开心激情婷婷久久视频-亚洲精品日韩在线观看视频网站-亚洲av欧美av日韩av,日本色一区二区三区,国产亚洲成性色av人片在线观,国产91熟女高潮一区二区抖

歡迎來到合肥浪訊網(wǎng)絡(luò)科技有限公司官網(wǎng)
  咨詢服務(wù)熱線:400-099-8848

在Vue中,如何移除多個(gè)事件監(jiān)聽器?

發(fā)布時(shí)間:2025-11-04 文章來源:本站  瀏覽次數(shù):480
在 Vue 中移除多個(gè)事件監(jiān)聽器,核心思路是 “集中管理事件與回調(diào)的關(guān)聯(lián)關(guān)系,在合適時(shí)機(jī)批量遍歷移除”,避免遺漏或重復(fù)操作。以下是具體實(shí)現(xiàn)方法,覆蓋 Vue 3 和 Vue 2 場景:

一、Vue 3(組合式 API):用數(shù)組 / 對象管理事件

1. 用數(shù)組批量管理(適合同類型事件)

vue
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';

const btnRef = ref(null);
const events = [
  { type: 'click', handler: handleClick },
  { type: 'mouseenter', handler: handleMouseEnter }
];

function handleClick() { /* ... */ }
function handleMouseEnter() { /* ... */ }

onMounted(() => {
  events.forEach(({ type, handler }) => {
    btnRef.value?.addEventListener(type, handler);
  });
});

onUnmounted(() => {
  events.forEach(({ type, handler }) => {
    btnRef.value?.removeEventListener(type, handler);
  });
});
</script>

2. 用 Map 管理(適合多類型 / 多元素)

vue
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';

const boxRef = ref(null);
const eventMap = new Map([
  ['mousedown', handleMouseDown],
  ['mousemove', handleMouseMove],
  ['mouseup', handleMouseUp]
]);

function handleMouseDown() { /* ... */ }
function handleMouseMove() { /* ... */ }
function handleMouseUp() { /* ... */ }

onMounted(() => {
  eventMap.forEach((handler, type) => {
    boxRef.value?.addEventListener(type, handler);
  });
});

onUnmounted(() => {
  eventMap.forEach((handler, type) => {
    boxRef.value?.removeEventListener(type, handler);
  });
});
</script>

二、Vue 2(選項(xiàng)式 API):在 beforeDestroy 中批量移除

javascript
運(yùn)行
export default {
  data() {
    return {
      eventListeners: [
        { el: 'window', type: 'scroll', handler: this.handleScroll },
        { el: 'document', type: 'click', handler: this.handleClick }
      ]
    };
  },
  methods: {
    handleScroll() { /* ... */ },
    handleClick() { /* ... */ }
  },
  mounted() {
    this.eventListeners.forEach(({ el, type, handler }) => {
      const target = el === 'window' ? window : document;
      target.addEventListener(type, handler);
    });
  },
  beforeDestroy() {
    this.eventListeners.forEach(({ el, type, handler }) => {
      const target = el === 'window' ? window : document;
      target.removeEventListener(type, handler);
    });
  }
};

三、第三方庫事件的批量移除

vue
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';
import * as echarts from 'echarts';

const chartRef = ref(null);
let chart = null;

// ECharts 事件映射
const chartEvents = [
  ['click', handleChartClick],
  ['legendselectchanged', handleLegendChange]
];

function handleChartClick() { /* ... */ }
function handleLegendChange() { /* ... */ }

onMounted(() => {
  chart = echarts.init(chartRef.value);
  chartEvents.forEach(([type, handler]) => {
    chart.on(type, handler);
  });
});

onUnmounted(() => {
  chartEvents.forEach(([type, handler]) => {
    chart.off(type, handler);
  });
  chart.dispose();
});
</script>

四、避坑指南

  1. 確;卣{(diào)函數(shù)引用一致
    • 錯誤:用匿名函數(shù)綁定
    • 正確:用具名函數(shù)或 useCallback 緩存
  2. 捕獲階段參數(shù)匹配
    javascript
    運(yùn)行
    // 綁定
    el.addEventListener('click', handler, true);
    // 移除
    el.removeEventListener('click', handler, true);
    
  3. 動態(tài)元素的事件委托 對 v-for 列表,優(yōu)先用事件委托減少監(jiān)聽:
    vue
    <ul @click="handleItemClick">
      <li v-for="item in list" :data-id="item.id">{{ item.name }}</li>
    </ul>
    

總結(jié)

  • 管理方式:用數(shù)組 / Map 存儲事件配置,集中管理
  • 移除時(shí)機(jī):Vue 3 在 onUnmounted,Vue 2 在 beforeDestroy
  • 核心原則:綁定與移除的參數(shù)(類型、回調(diào)、捕獲階段)必須完全一致

上一條:在Vue中,如何移除一個(gè)...

下一條:讓網(wǎng)站走向成功的五大內(nèi)容...

av成人中文字幕在线观看-久视频中文字幕免费在线精品-国产av系列一区二区-国产一区二区蜜臀大屁股 | 天天天天操夜夜夜夜操-99亚洲精品视频在线-国产欧美日韩精品网-亚洲欧美日韩一区二区搜索 | 97超碰精品视频在线观看-国产欧美日韩中文字幕-久久精品国产99精品最新版-日韩一区熟女av发布 | 99精品久久久久久久婷婷-久久久久久久久免费视频国产-久久久一区二区三区四区五区av-亚洲 中文字幕 有码 | 日韩久久精品人妻av中文字幕-91精品久久久久蜜臀-在线看亚洲午夜理论片av大片-久久久久久精品无遮挡 | 黄色亚洲日午夜在线-日韩一区二区三区水蜜桃-久久99热只有频精品8国语-91成人国产视频在线观看 | 日韩精品在线视频网站-日韩精品欧美亚洲最大-超碰心免费在线97-国产精品高潮呻吟av久久 | av传媒在线免费观看-欧美蜜桃精品久久久久久-色婷婷基地五月天-91久久久久久精品国元产码 | 18禁国产麻豆精品久久久久久-超碰人妻av狠狠干-色婷婷综合久久久久久中文-国产av一区二区青青草原 | 精品一区二区三区四区五区在线观看-亚洲欧美日韩成人在线激情网-丰满人妻 中文字幕-亚洲五月综合在线婷婷 | 91中文字幕综合在线-中文字幕人妻中出一区二区-欧美乱熟妇区一区二区三-欧美日韩视频在线不卡 | 国产二区三区四区在线-内射颜射无套在线观看-亚洲中文字幕激情五月婷婷-91久久国产久久国产网址 国产91精品免费看-97精品国产91久久-91久久国产精品综合-91精品欧美久久久久激情视频 | 日韩激情第一页-操老女人91妇女老熟女-97精品人妻一区二区三-久久久久精品亚洲中文字幕 | 99麻豆久久久精品国产-国内精品久久久久伊人av-91精品国产综合久久久蜜臀粉嫩-中文字幕高清免费在线人妻 | 人人妻人人搞人人插-精品久久区视频-欧美日韩激情成人-日韩免费电影男女操操操 | 97精品综合久久视频-久久久久久久久久久久久久激情网-欧美日韩爱爱视频-蜜臀久久精品久久久 | 在线视频 国产 日韩 欧美-久久精品 中文字幕-欧美 日韩 激情 最新-日韩一区二区三区北条麻妃 | 99re国产在线精品-国产av一区二区三区日韩接吻-久久久久久国产精品免费免费中文-久久久久久久久久97国产 | 日韩销魂精品视频-91精品国产91久久久久久九色-日韩在线有码中文字幕有码中文-色综久久久久金八天国四虎 | 久久精品北条麻妃av观看-韩日伦理片在线观看-国产成人精品又爽的视频-97精品国产久久久 | 视频一区视频二区在线观看-1204人妻一区二区三区-欧美高清一区二区三区高清-91久久精品免费在线播放 | 国产又粗又长又大又黄又爽的视频-日韩爱爱特级视频中文字幕-国产综合精品91老熟女的胸胸-女同精品一区二区三区在线 | 136国产福利精品成av人导航-麻豆精品久久久久蜜桃-久久91精品国产91久久跳舞-欧美三级在线一区二区三区 | 隔壁的女孩在线播放中文字幕-久久久久精品一区二区三区-国产精品久久久久久久久久久痴汉-西门庆91蜜桃臀女神在线 | 欧美精品久久久久久一二三黑人-亚洲视频中文字幕另类小说综合网-另类av一区在线-亚洲综合久久一区二区三区蜜月 | 精品人妻在线一区二区三区-又长又粗又硬又猛又高潮不断-国产久久中文字幕-久久精品中国熟妇 | 伊人久久久久久久蜜臀at-超碰在线啪啪啪-天天插天天干天天操天天日-国产精品日韩经典中文字幕 | 97超碰精品视频在线观看-国产欧美日韩中文字幕-久久精品国产99精品最新版-日韩一区熟女av发布 | 国产69精品久久久久久久久-精品人妻粉嫩av-日韩精品在线观看的网址-夜夜躁蜜桃av一区二区三区妖精 | 少妇人妻精品免费看-亚洲a在线观看免费-日韩熟女丝袜诱惑-久久五月色婷婷丁香 | 久久久久久精品免费久久18-久久6日本免费-日韩美女黄色大片-亚洲中文字幕精品在线 | 国产又粗又硬又大又爽又黄的免费视频-91插插插免费播-青青久久久艹热视频-日韩三级在线观看免费网站 | 日韩一区在线播放网站-最新69国产成人精品视频免费-日本丰满熟女人妻-国产精品 日韩精品 欧美 | 欧美激情另类综合-成人97在线观看视频-日韩欧美国产综合网-婷婷国产五月天免费视频久久 | 亚洲天堂男人网亚洲天堂女人网-亚洲精品久久中文字幕xx-久久久久久久精美人妻-国产激情黑人91蜜 天天操天天干天天日天天操-人妻少妇久久久一区二区三区-日韩男女三级视频-国产又粗又猛又爽又黄的黄牛视频 | 欧美一区二区三区免费不卡视频-亚洲欧美情色在线观看-久久久久精品人妻一区-国产91亚洲精品久久久久 | 国产一区二区在线观看蜜臀av-亚洲乱码久久久久-欧美一区二区三区…-久久国产精品嫩草 | 日韩欧美国产在线免费观看-国产精品高潮呻吟久久av有码-99日视频在线播放-久久综合久久综合大香蕉 | 91精品综合久久熟女-久久综合激的五月天-欧美国产日韩在线不卡-久久中文字幕综合网 | 精品av中文字幕在线观看-狠狠人妻久久久久久中文字幕-国产精品99久久久久久a-中文字幕在线中文字幕日亚韩一区 | 精品久久久久久久久久久久久高清视-久久久久久精久-国产精品久久久久久无毒偷食禁果-不卡视频一区二区在线 |