Vue MutationObserver 监听

MutationObserver 之前写过一篇详解,具体可参考:https://blog.csdn.net/qq_36020334/article/details/156300319?spm=1001.2014.3001.5502

在前端基于Vue的开发中,Vue2用watch来监听数据的变化,通过deep属性的配置项来监听对象内部的变化。 在 Vue3 中使用 proxy 替代了defineProperty 来监听整个对象,便利程度大大提高。

但有时候会遇到这样一些特殊情况,例如:想要给一个按钮动态的绑定一个样式,这个样式的绑定依赖于定义的一个变量,但是该变量也是动态的,变量的值依赖于另外一个内部组件样式的变化。 这就用到了 MutationObserver 去监听一个特定样式的变化,进而去实现业务的需求

代码实现:

复制代码
<template>
  <div :class="{'mycolor':isActive}" class="content">
    <el-button
      type="primary"
      class="el-button"
      @click.stop="openDialog"
      >打开弹窗</el-button
    >
    <el-dialog
      ref="dialog"
      title="我是弹窗啊"
      width="300px"
      :visible="false"
      :before-close="dialogBeforeClose"
    >
      <div></div>
      <div slot="footer">
        <el-button @click="dialogBeforeClose">取 消</el-button>
        <el-button type="primary" @click="dialogBeforeClose">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "testContent",
  data() {
    return {
      isActive: false,
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.watchDialogStyle(this.$refs.dialog.$el);
    });
  },
  methods: {
    openDialog() {
      this.$refs.dialog.$el.style.display = "block";
    },
    dialogBeforeClose() {
      this.$refs.dialog.$el.style.display = "none";
    },
    watchDialogStyle(dialog) {
      const observer = new MutationObserver( (mutations) =>  {
      mutations.forEach((mutation) => {
          if(dialog.style.display === 'none'){
            this.isActive = true;
          }
          else{
            this.isActive = false;
          }
        });
      });
      observer.observe(dialog, {
        attributeFilter: ["style"]
      });
    },
  },
};
</script>
相关推荐
郭老二21 小时前
【前端】vue3:编译步骤
前端
不在逃避q21 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁1 天前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9851 天前
高进度算法模板速记(待完善)
java·前端·算法
陈随易1 天前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师1 天前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174461 天前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈1 天前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen1 天前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒1 天前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端