vue3中的Teleport传送门

传送门组件提供一种简洁的方式可以指定它里面内容的父元素。
使用方法:

<teleport to='body'>// to:要移动到的元素下面,
	
</teleport>

看个案例:

//子组件:
<template>
    <div>
        <button @click="modelOpen=true">弹出一个窗口</button>
        <teleport to='body'>
            <div v-if="modelOpen" class="modal">
                <div>这是一个弹窗
                    我的父元素是body
                    <button @click="modelOpen = false">关闭</button>
                </div>
            </div>
        </teleport>
    </div>
</template>
<script>
export default {
    name: '',
    data() {
        return {
            modelOpen:true
        }
    },
  
}
</script>
<style scoped>
.modal {
 position: absolute;
 top: 0; right: 0; bottom: 0; left: 0;
 background-color: rgba(0,0,0,.5);
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
}

.modal div {
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 background-color: white;
 width: 300px;
 height: 300px;
 padding: 5px;
}

</style>
//父组件
<template>
  <h1>{{ msg }}</h1>
  <p>{{ counter }}</p>
  <p>{{ doubleCounter }}</p>
  <p>{{message}}</p>
  <p ref="desc"></p>
  <ModelButton></ModelButton>
</template>

<script>
import { reactive, computed, onMounted, onUnmounted, ref, toRefs, watch } from "vue";
import ModelButton from './ModelButton.vue'
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },
  components:{
    ModelButton
  },
  setup() {
    const {counter,doubleCounter} = user();
    const message = ref("some message");
    const desc=ref(null)
    watch(counter,(val,oldval)=>{
      const p=desc.value
      p.textContent=`from ${oldval} to ${val}`
    })
    return {counter,doubleCounter,message,desc}
  },
};
function user() {
  const obj = reactive({
    counter: 1,
    doubleCounter: computed(() => obj.counter * 2),
  });
  let timer;
  onMounted(() => {
    timer=setInterval(() => {
        obj.counter++
    }, 1000);
  });
  onUnmounted(() => {
    clearInterval()
  });
  return toRefs(obj) ;
}
</script>

在这里插入图片描述
并且我们是将内容插入到body下的所以标签是属于body的子级。和#app属于同一级别。在这里插入图片描述

回答: Vue3中的Teleport组件可以在需要将DOM元素放置到指定位置的场景中使用。它可以将当前的DOM元素传送到指定的目标元素中,或者将其还原到原来的位置。一个常见的使用场景是实现弹出框或模态框的效果,可以将弹出框的DOM元素传送到指定的目标位置,从而实现在页面的任意位置显示弹出框的效果。另外,Teleport组件还可以在视图切换时实现平滑的动画效果,例如在切换页面时,可以先将当前页面的DOM元素传送到指定位置,然后再将下一个页面的DOM元素传送回原来的位置,以实现过渡效果。总的来说,Teleport组件在需要动态操作DOM元素位置的场景中非常有用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue2实现Vue3中的Teleport传送门,【应用场景:实现B站视频播放效果】](https://blog.csdn.net/m0_51431448/article/details/124158279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue3 teleport的使用](https://blog.csdn.net/qq_40864647/article/details/126263699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值