zoukankan      html  css  js  c++  java
  • vue3新特性teleport传送原来这么神奇

    我对teleport的理解

    teleport有传送的意思,读音【te li po t】[嘻嘻],看官们应该知道读啥子了吧
    它可以将你写的代码传送到某一个地方
    传送到哪一个地方呢?
    传送到你标记的地方,比如说传送到body下,html下
    
    官方说:Teleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,
    上面这一句话是说传送到除了app之外的地方。
    也就是说不能够传送到app之内。【注意了】
    点像哆啦A梦的“任意门”
    主要运用在弹窗上,消息提示,这样的场景!
    下面我们就来简单使用一下:
    我们将弹窗组件移动到body下
    

    场景描述

    a-test组件中有b-test组件,b-test组件中有c-mask[弹窗组件]
    我们点击按钮,将b-test组件中的组件c-mask[弹窗组件]移动到body下
    

    容器下有a-test组件

    <template>
      <div class="box">
        <a-test></a-test>  
      </div>
    </template>
    
    <script>
    import atest from '../components/a-test.vue'
      export default {
        components:{
          'a-test':atest,
        },
      }
    </script>
    

    a-test组件下有b-test组件

    <template>
      <div class="a-test" >
        我是a-test组件
        <b-test></b-test>
        <div id="testdemo"></div>
      </div>
    </template>
    
    <script>
    import btest from '../components/b-test.vue'
    export default {
      components:{
          'b-test':btest
      },
    }
    </script>
    

    b-test组件下有c-mask[弹窗组件]组件

    <template>
      <div class="b-test">
        我是b-test组件
        <c-mask></c-mask>
      </div>
    </template>
    
    <script>
    import cmask  from "./c-mask.vue"
    export default {
      components:{
          'c-mask':cmask
      },
    }
    </script>
    

    c-mask[弹窗组件]组件移动到body下

    <template>
      <div>
        <a-button type="primary" @click="openHander">open</a-button>
        <!-- 将内容区域的代码移动到body下 -->
        <teleport to='body'>
          <div class="mask" v-if="showFlag">
            <h1>对话框组件</h1>
            <div>
                我是内容哈哈
            </div>
            <a-button  @click="openHander">关闭</a-button>
          </div>
        </teleport>
      </div>
    </template>
    
    <script>
    import { ref } from '@vue/reactivity'
    export default {
        setup () {
            let showFlag=ref(false)
            const openHander=()=>{
                showFlag.value=!showFlag.value
            }
            return {showFlag,openHander}
        }
    }
    </script>
    

    主要注意的地方

    通过上面的小粒子,想必你已经看明白了。
    需要注意的是不可以移动到#app之内
    我们可以在index.html中创建id=myapp的容器
    将它传送在myapp容器下,我们看一下
    

    index.html 创建一个容器

    <body>
        <div id="app"></div>
        //等会将会传送到这里哈
        <div id="myapp"></div>
      </body>
    

    传送

    <template>
      <div>
        <a-button type="primary" @click="openHander">open</a-button>
        <!-- 将内容区域的代码移动到id=myapp下 -->
        <teleport to='#myapp'>
            <div class="mask" v-if="showFlag">
                <h1>对话框组件</h1>
                <div>
                    我是内容哈哈
                </div>
                <a-button  @click="openHander">关闭</a-button>
            </div>
        </teleport>
      </div>
    </template>
    <script>
    import { ref } from '@vue/reactivity'
    export default {
      setup () {
        let showFlag=ref(false)
        const openHander=()=>{
            showFlag.value=!showFlag.value
        }
        return {showFlag,openHander}
      }
    }
    </script>
    

  • 相关阅读:
    大型架构.net平台篇(中间层均衡负载WCF)
    大型高性能ASP.NET系统架构设计
    百万级访问量网站的技术准备工作
    容器管理的分布式事务
    SQL Server 2005实现负载均衡
    nginx负载均衡 tomcat集群 memcache共享session
    JTA实现跨数据库操作
    [AX]AX2012 Table的AOSAuthorization 属性
    [AX]AX2012 Form上的ReferenceGroup control
    [AX]AX2012 Form开发概览
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15496429.html
Copyright © 2011-2022 走看看