vue2实现传送门效果的示例

 更新时间:2023年04月23日 09:46:08   作者:汉武大帝·  
本文主要介绍了vue2实现传送门效果的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

描述

在Vue3中<Teleport> 是一个内置组件,使我们可以将一个组件的一部分模板“传送”到该组件的 DOM 层次结构之外的 DOM 节点中;现在在vue2实现一下效果:将组件挂载到body上

先看效果

代码

Teleport 组件:

<script>
export default {
  props: {
    to: {
      type: String,
      required: true
    },
    disabled: {
      type: Boolean,
      required: true
    }
  },
  inject: ['parent'],
  //   inject 选项应该是:
  // 一个字符串数组,或 一个对象,对象的 key 是本地的绑定名,value 是:
  //     在可用的注入内容中搜索用的 key (字符串或 Symbol),或
  //     一个对象,该对象的:
  //          from property 是在可用的注入内容中搜索用的 key (字符串或 Symbol)
  //          default property 是降级情况下使用的 value
 
  // Vue 选项中的 render 函数若存在,则 Vue 构造函数不会从 template 选项或通过 el 选项指定的挂载元素中提取出的 HTML 模板编译渲染函数。
  render() {
    return <div class="Teleport">{this.$scopedSlots.default()}</div>
    // $scopedSlots用来访问作用域插槽。对于包括 默认 slot 在内的每一个插槽,该对象都包含一个返回相应 VNode 的函数。
  },
  watch: {
    disabled() {
      if (!this.disabled) {
        // this指向组件的实例。$el指向当前组件的DOM元素。
        document.querySelector(this.to).appendChild(this.$el);
      } else {
        this.parent.toSourceDom(this.$el);
      }
    }
  },
  mounted() {
    if(!this.disabled) document.querySelector(this.to).appendChild(this.$el)
  },
  methods: {},
};
</script>
<style lang="scss" scoped>
.Teleport {
  width: 100%;
  height: 100%;
}
</style>

index.vue 中引用 Teleport.vue 组件

<template>
  <div>
    <Teleport v-if="isShow" :disabled="isTeleport" to="body">
      <div class="cover">
        <div class="inner">
          我是弹窗
          <div class="close" @click="closed">关闭按钮</div>
        </div>
      </div>
    </Teleport>
    <button @click="show">显示</button>
  </div>
</template>
<script>
import Teleport from "./Teleport.vue";
import model from "./model.vue";
export default {
  data() {
    return {
      isShow: false, // 控制 Teleport 组件挂载时机
      isTeleport: false, // 控制什么时候被传送
    };
  },
  provide() {
    return {
      parent: this,
    };
  },
  components: { Teleport, model },
  methods: {
    show() {
      this.isShow = true;
    },
    closeModel() {
      this.isShow = false;
    },
    toSourceDom(dom) {
      document.getElementById("sourceBox").appendChild(dom);
    },
  },
};
</script>
<style lang="scss" scoped>
.cover {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba($color: #000000, $alpha: 0.3);
  .inner {
    width: 500px;
    height: 300px;
    border-radius: 10px;
    background: #fff;
    color: red;
    font-weight: 600;
    position: absolute;
    left: 40%;
    top: 30%;
    text-align: center;
    font-size: 30px;
    .close{
      position: absolute;
      bottom: 0;
      right: 0;
      background: skyblue;
      padding: 10px;
      cursor: pointer;
      border-radius: 10px 0 0 0;
    }
  }
}
</style>

到此这篇关于vue2实现传送门效果的示例的文章就介绍到这了,更多相关vue2 传送门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Vue脚手架中render 理解

    关于Vue脚手架中render 理解

    这篇文章主要介绍了Vue脚手架中的 render 理解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • vue3实现封装时间计算-日期倒计时组件-还有XX天&第XX天

    vue3实现封装时间计算-日期倒计时组件-还有XX天&第XX天

    这篇文章主要介绍了vue3实现封装时间计算-日期倒计时组件-还有XX天&第XX天,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue实现自定义日期组件功能的实例代码

    vue实现自定义日期组件功能的实例代码

    这篇文章主要介绍了vue自定义日期组件的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • Vue多布局模式实现方法详细讲解

    Vue多布局模式实现方法详细讲解

    这篇文章主要介绍了Vue多布局模式实现方法,多布局模式可以根据用户角色所在场景切换页面布局,是非常常见的基础功能,感兴趣的同学可以参考下文
    2023-05-05
  • vue如何在引入的el-tree前添加图标

    vue如何在引入的el-tree前添加图标

    这篇文章主要介绍了vue如何在引入的el-tree前添加图标问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue项目中常用解决跨域的方法总结(CORS和Proxy)

    vue项目中常用解决跨域的方法总结(CORS和Proxy)

    在vue项目中,一般我们会遇到跨域的问题,vue项目中解决跨域是非常简单的,下面这篇文章主要给大家介绍了关于vue项目中常用解决跨域的方法,主要解释CROS和Proxy两种方式,需要的朋友可以参考下
    2022-12-12
  • Vue表单验证插件Vue Validator使用方法详解

    Vue表单验证插件Vue Validator使用方法详解

    这篇文章主要为大家详细介绍了Vue表单验证插件Vue Validator使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Vue首页加载过慢的解决方式

    Vue首页加载过慢的解决方式

    这篇文章主要介绍了Vue首页加载过慢的解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue生命周期区别详解

    Vue生命周期区别详解

    这篇文章主要介绍了Vue生命周期区别详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 微信小程序Webview与H5通信的思路与实战记录

    微信小程序Webview与H5通信的思路与实战记录

    这篇文章主要介绍了微信小程序Webview与H5通信的思路与实战的相关资料,由于微信小程序与H5之间的通信限制,无法满足业务需求,通过动态改变url的hash值来传递参数,并利用vue-router组件的路由守卫来避免页面刷新,需要的朋友可以参考下
    2025-01-01

最新评论