vue学习-teleport

基本使用

teleport 可以将包裹的内容移动到另外的dom元素下

属性:

to:类型Stirng,必须是有效的查询选择器(#some-id  .some-class之类)或 HTMLElement(this.$refs.XX)

disabled:类型boolean,启用和禁用转移功能

改变disabled,这将移动实际的 DOM 节点,而不是被销毁和重新创建,并且它还将保持任何组件实例的活动状态。所有有状态的 HTML 元素 (即播放的视频) 都将保持其状态 

teleport包裹的子组件虽然被转移到了不同地方 ,但是依旧是当前组件的子级,可以当作正在子组件使用,props也依旧生效。

<template>
  <div id="f">
    <teleport to="body" :disabled="disabled">
      <modal :msg="msg"></modal>
    </teleport>
  </div>
</template>

<script>
import Modal from "./Modal.vue";
export default {
  components: { Modal },
  data() {
    return {
      msg: "父组件信息",
      disabled: true,
    };
  },
  mounted() {
    setInterval(() => {
      this.disabled = !this.disabled;
    }, 1000);
  },
};
</script>
// Moda.vue
<template>
  <div>{{ msg }}</div>
</template>

<script>
export default {
  props: {
    msg: String,
  },
};
</script>


在同一目标上使用多个 teleport

多个 <teleport> 组件可以将其内容挂载到同一个目标元素。顺序将是一个简单的追加——稍后挂载将位于目标元素中较早的挂载之后

<teleport to="#modals">
  <div>A</div>
</teleport>
<teleport to="#modals">
  <div>B</div>
</teleport>

<!-- result-->
<div id="modals">
  <div>A</div>
  <div>B</div>
</div>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值