Vue使用自定义指令打开dialog的实现方法

 更新时间:2024年07月11日 08:27:40   作者:风吹叶不飘被占用了  
在web后台管理项目中,经常要用到dialog,就vue来说,使用方式则是引入组件,注册,在template中使用,试想一下,如果我们需要在项目中的不同.vue文件中使用该dialog,但是又不想每次都在template中写入组件该如何实现呢?本文我们介绍用指令控制dialog,需要的朋友可以参考下

完整代码见:https://codesandbox.io/

1. 写一个dialog

既然要展示一个dialog,那么首先我们需要准备一个dialog,供展示用,如下:实现了一个简单的dialog,接收message和visible作为参数

<template>
  <el-dialog
    title="提示"
    :visible.sync="dialogVisible"
    width="30%"
    @close="handleClose"
  >
    <span>这是一段信息: {{ message }}</span>
  </el-dialog>
</template>

<script>
export default {
  components: {},
  props: {
    message: {
      type: String,
      default: "",
    },
    visible: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      dialogVisible: false,
    };
  },
  watch: {
    visible: {
      handler: function (v) {
        this.dialogVisible = v;
      },
      immediate: true,
    },
  },
  methods: {
    handleClose() {
      this.$emit("close");
    },
  },
};
</script>

<style></style>

2. 用自定义指令来控制dialog

弹窗有了,接下来实现个自定义指令来打开它

import Popup from "../components/Popup.vue";
import Vue from "vue";
/**
 * 打开弹窗
 * @param {Object} binding
 */
const openDialog = (binding) => {
  const popupComponent = Vue.extend(Popup);
  const instance = new popupComponent({
    propsData: {
      visible: true,
      message: binding.value,
    },
  });
  instance.$mount();
  document.body.appendChild(instance.$el);
  instance.$on("close", () => {
    document.body.removeChild(instance.$el);
    instance.$destroy();
  });
};

export default {
  bind(el, binding) {
    const handler = () => {
      openDialog(binding);
    };
    el.addEventListener("click", handler);
    el._clickHandler = handler;
  },
  unbind: function (el) {
    el.removeEventListener("click", el._clickHandler);
  },
};

3. 每次渲染新的dialog

如上述代码,我们每次打开都会是一个新的弹窗,所以visible从外面传入其实没什么存在的意义,所以我们将弹窗中的内容再改造下,将visible相关的逻辑删除,dialogVisible默认为true即可。

4.使用该自定义指令

<template>
  <div id="app">
    <div v-popup="msg">点击打开弹窗</div>
  </div>
</template>

<script>
import popup from "./directives/popup";
export default {
  name: "App",
  directives: {
    popup,
  },
  data() {
    return {
      msg: "传递的消息",
    };
  },
};
</script>

效果图示:

到此这篇关于Vue使用自定义指令打开dialog的实现方法的文章就介绍到这了,更多相关Vue打开dialog内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue2.x父组件影响子组件样式的方法

    Vue2.x父组件影响子组件样式的方法

    在Vue.js开发中,我们经常需要创建可复用的组件,这些组件可能会有自己的样式规则,而有时我们希望父组件能够影响子组件的样式,本文将详细介绍如何使用v-deep以及一些相关的最佳实践,需要的朋友可以参考下
    2024-10-10
  • 在 Vue 中编写 SVG 图标组件的方法

    在 Vue 中编写 SVG 图标组件的方法

    这篇文章主要介绍了在 Vue 中编写 SVG 图标组件的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 在vue中使用echarts(折线图的demo,markline用法)

    在vue中使用echarts(折线图的demo,markline用法)

    这篇文章主要介绍了在vue中使用echarts(折线图的demo,markline用法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • VueJs里利用CryptoJs实现加密及解密的方法示例

    VueJs里利用CryptoJs实现加密及解密的方法示例

    这篇文章主要介绍了VueJs里利用CryptoJs实现加密及解密的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • vue中对虚拟dom的理解知识点总结

    vue中对虚拟dom的理解知识点总结

    在本篇文章里小编给大家整理了一篇关于vue中对虚拟dom的理解知识点总结内容,有兴趣的朋友们可以学习参考下。
    2021-06-06
  • Vue2源码解析之自定义指令

    Vue2源码解析之自定义指令

    自定义指令,其实就是在vue提供的钩子中写代码,这篇文章将从源码的角度,带大家深入了解一下Vue2种自定义指令的实现与使用,需要的可以参考一下
    2023-05-05
  • Vue服务器渲染Nuxt学习笔记

    Vue服务器渲染Nuxt学习笔记

    本篇文章主要介绍了Vue服务器渲染Nuxt学习笔记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue脚手架配置预渲染及prerender-spa-plugin配置方式

    vue脚手架配置预渲染及prerender-spa-plugin配置方式

    这篇文章主要介绍了vue脚手架配置预渲染及prerender-spa-plugin配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Element Badge标记的使用方法

    Element Badge标记的使用方法

    这篇文章主要介绍了Element Badge标记的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • vue中数据不响应的问题及解决

    vue中数据不响应的问题及解决

    这篇文章主要介绍了vue中数据不响应的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论