国产女主播成人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)容...

九九99热久久99精品国产99热-99免费国产精品视频-日韩红桃视频在线观看-亚洲高清一级不卡av | 人妻av中文字字幕第一-欧美日韩在线黄色-亚洲精品小视频在线-欧美日韩一区二区三区五区 | 少妇中文字幕伦理-青青在线精品2018国产-欧美日韩另类人妻中字-国产又大又硬又粗又长又黄视频 | 久久精品女人的天堂av-一区二区三区熟女乱-日韩中文字幕内射-日韩欧美 一区二区三区 | 日一区二区在线观看视频-久久精品成人热国产成-日韩v片免费观看-色av性av十丰满av在线 | 国产精品国产三级国产在线专50-51精产国品久久一二三a区蜜桃-欧美日韩深喉视频在线-日韩av手机在线不卡 | 999久久亚洲精品-91福利试看区-特黄特色大片免费看-99久久国产综合精品色 | 日韩欧美资源一区二区三区-欧美 日韩 亚洲 第一页-高潮av一区二区三区-中文字幕 日韩二区 | 日韩精品中文字幕组-国产精品美女久久久久久久久久-日韩精品熟女中文字幕-伊人色婷婷综合网 | 麻豆成人免费在线观看高清视频-国产精品97麻豆cm传媒-久久偷拍厕所视频-欧美日韩亚洲麻豆激情在线 | 中文字幕国产精品av-亚洲精品日韩欧美偷拍-日韩欧美丝袜美腿中文字幕-日日噜噜夜夜狠狠久久香91 日韩av东京热电影-丰满人妻一区二区二区53视频-久久丝袜一区二区三区-国产熟女一区二区三 | 五月婷婷丁香六月图片-超碰在线人妻观看-国产一区二区熟女综合-伊人久久大香线蕉av一区 | 亚洲天堂网中文在线-国产一区二区h在线观看-久久少妇也好色免费视频-日韩a级片在线 | 欧美人妻一区二区三区视频-91桃色一区二区亚洲熟-中文字幕日韩av在线观看-99人妻超碰在线 | 国产午夜伦鲁鲁91-激情欧美一区二区三区在线观看-亚洲精品乱码久久久久久5-热久久在线观看 | 精品少妇人妻aav-日韩美女一级黄色-国产一区二区三区手机在线观看-亚洲精品国产乱码久久久久久 | 久久久久久十八禁看-久久精品国产亚洲精品2020-成人综合网站色av-久久99久久久久久久噜噜 | 中文字幕日韩欧美av-麻豆免费av在线观看-最近日韩一级高清视频在线-国产av天堂亚洲国产av麻豆 | 风间由美一区二区三区在线观看-中文字幕熟女久久av-91麻豆亚洲精品-久久久精品人妻av | 99网曝精品在线观看-久久精品视频这里有8-欧美va亚洲va日韩va综合-91亚洲国产三上悠亚在线 | 激情人妻日韩一区-国产亚洲中文字幕人-中文字幕精品视频在线-97久久碰国产精品 | av成人黄片在线播放-久久久久天天夜夜亚洲av无-pregnant高潮喷水-大香蕉大香蕉大香蕉大香蕉在线 日韩人欧美?片内射久久-中文字幕精品在线人妻-av一区二区回娘家-日韩在线中文字幕伦理 | 日韩欧美激情在线视频-欧美人妻中文字幕在线播放-超碰在线精品免费-中文字幕在线乱码人妻 | 日韩在线观看视频区一区二-亚洲老熟妇另类-亚洲欧美韩国妖精视频-久久精品国产9久久综合 | 熟女30路40路50路60路-日韩免费av三区-日韩老熟妇xxxx-一道精品视频一区二区三区视频 | 国产人妻熟女一区二区三区-日韩精品色哟哟-91长腿极品美女宿舍美女-日韩国产人妻一区二区 | 成人av亚洲一区二区-亚洲国产精品欧美日韩在线观看-日本中文字幕熟女人妻在线观看-色婷婷亚洲欧洲图片 | 日韩美女 中文字幕-日日夜夜夜国产精品-国产精品久久久久久久美男-久久婷婷久久久 | 国产福利一区二区三区在线观看-妈妈的朋友4在线观看中文字幕-人妻精品二区三区更新-成人app免费看片 | 国内精品久久在线观看-精品中文久久久久久-北条麻妃 av 中文字幕-欧美成人精品人妻久久久久久 | 国产精品日韩av在线观看-久久精品高潮999久久久-x88av熟女人妻-日韩 视频一区视频 二区 | 91麻豆国产福利免费片-日韩在线播放最新av-欧美丰满熟妇网-激情久久伊人婷婷 | 亚洲av中文高清中文-一道本一区二区久久久久久久-日韩 亚洲 第1页-超碰免费在线7 | 91大神视频免费在线播放-精品久久国产乱码欠精品-国产精品久久久久久久久久人妻-嫩草伊人久久精品少妇av | 91久久久久久在线-亚洲天堂中文字幕av手机版-国产亚洲欧美一区二区-色婷婷av一区二区三区免费 | 国产精品麻豆综合在线-伊人久久久久中文字幕-国产精品久久久久久久久av大片-国产欧美日韩一级二级三级 | 久久久天天日天天爱-五月激情四射婷婷姐姐-麻豆国产免费观看-成人大片之男人的天堂 | 91人妻人人澡人人爽人人精品一-国产大屁股一区二区三区-日韩中文字幕国产一区-久久久久久爱爱 | 91久久精品九色一区二区三区-国产精品久久久男同-亚洲国产久久久久久久久久久久-国产极品久久久久久久av电影 | 国产人妻少妇一区二区三区-91精品国产综合久久久蜜臀九-欧美国产视频一区二区三区-av在线中文字幕国产 | 国产精品精品久久久-国产精品久久久久粉嫩小-91熟女激情视频-国产精品99久久久久久精品人 |