Fishmoving 2021-12-28 14:32 采纳率: 0%
浏览 123

关于Vue.js中getElementById().addEventListener使用的问题

问题遇到的现象和发生背景

在使用addEventListener时, 发现在Vue模板外为Vue实例添加的监听操作无效

按照以下代码的执行结果, 我现在的理解就是, 对Vue实例(下图id2区域)的事件监听, 监听代码得放在Vue模板中
而对非Vue实例(下图id1区域)的事件监听, 监听代码不管放在Vue模板里面还是外面, 都不影响执行

问题相关代码,请勿粘贴截图
<div style="display: flex">
    <div id="id1">id1</div>
    <div id="app">
        <div id="id2">id2</div>
    </div>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
  function func1(id, log) {
    document.getElementById(id).addEventListener('click', function() {
      console.log('click ', id, log);
    })
  }

  func1('id1', ' out');  // 有效
  func1('id2', ' out');  // 无效

  const app = new Vue({
    el: "#app",
    created() {
      func1('id1', ' created');  // 有效
      func1('id2', ' created');  // 无效
    },
    mounted() {
      func1('id1', ' mounted');  // 有效
      func1('id2', ' mounted');  // 有效
    }
  })
</script>

运行结果及报错内容

分别点击id1区域和id2区域, 得到的执行情况如下

img


img

我的解答思路和尝试过的方法

按照以上代码的执行结果, 我现在的理解就是, 对Vue实例(上图id2区域)的事件监听, 监听代码得放在Vue模板中
而对非Vue实例(上图id1区域)的事件监听, 监听代码不管放在Vue模板里面还是外面, 都不影响执行

我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 星系收藏 2021-12-28 15:03
    关注

    vue生命周期中created时this被初始化,模板未被挂载,所以created中的id2拿不到;mounted时模板已被挂载,所以id2可以拿到;写在外面感觉也是因为模板未挂载的原因,导致id2拿不到

    评论

报告相同问题?

问题事件

  • 修改了问题 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?