最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 回首Vue3之组件篇(四)

    正文概述 掘金(也笑)   2021-08-13   518

    这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

    这篇文章我们来讲一下最后一个内置组件teleport的使用方法,在使用它们的时候我们又该注意什么呢,下面让我们一探究竟把。

    为什么使用 teleport

    我们在Vue中可以通过将 UI相关行为封装到组件中来构建 UI。我们也可以层级嵌套,说白了就是元素或组件可以一层套一层,形成一个UI树

    然而,有时组件模板的一部分逻辑上属于该组件,而从技术角度来看,最好将模板的这一部分移动到 DOM 中 Vue app 之外的其他位置。例如:

    创建一个包含全屏模式的组件。在大多数情况下,你希望模态框的逻辑存在于组件中,但是模态框的快速定位就很难通过 CSS 来解决,或者需要更改组件组合。这个时候我们就可以用teleport来解决这个问题。

    如何使用

    teleport有两个Prop:todisabled

    • to - string。需要 prop,必须是有效的查询选择器或 HTMLElement (如果在浏览器环境中使用)。使用to九可以把teleport包裹的内容传送到指定元素内。

    • disabled - boolean。此可选属性可用于禁用 <teleport> 的功能,这意味着teleport包裹的内容会在当前的位置,不会发生改变。

    to

    使用to传送到指定元素内,如下:

    渲染前

    <div id="app">
        <h1>
            <teleport to="#app">
                <span>{{title}}</span>
            </teleport>
        </h1>
    </div>
    

    渲染后

    <div id="app" data-v-app="">
        <span>Hi, world!</span>
        <h1><!--teleport start--><!--teleport end--></h1>
    </div>
    

    通过上述代码,你是不是发现 span跑到了div#app下面了,这就是teleport的作用。

    disabled

    使用to可以让teleport禁止传送,就好像施了定身术一样,如下: 渲染前

    <div id="app">
        <h1>
            // 此处多了 disabled
            <teleport to="#app" :disabled="true">
                <span>{{title}}</span>
            </teleport>
        </h1>
    </div>
    

    渲染后

    <div id="app" data-v-app="">
        <h1>
            <!--teleport start-->
            <span>Hi, world!</span>
            <!--teleport end-->
        </h1>
    </div>
    

    :disabled="true"就可以禁止teleport的功能了。

    结合 components 使用

    我们可以把teleport用到components中,自定义两个组件,如下:

    my-component-child

     app.component('my-component-child', {
        props:['name'],
        template: `<span>{{name}}</span>`
    })
    

    my-component

    app.component('my-component', {
        template: `<h1>
            <span>hello</span> 
            <teleport to="#app">
                <my-component-child name="world"></my-component-child>
            </teleport>
        </h1>`
    })
    

    这里我们需要注意的是:即使在不同的地方渲染 my-component-child,它仍将是 my-component 的子级,并将从中接收 name prop。

    在同一目标上使用多个 teleport

    有时我们会有这样的需求:需要多个 <teleport> 组件将其内容挂载到同一个目标元素上。顺序将是一个简单的追加——稍后挂载将位于目标元素中较早的挂载之后。如下: 渲染前

    <div id="app">
        <h3>
            <teleport to="#app">
                <h1>hello</h1>
            </teleport>
            <teleport to="#app">
                <h1>world</h1>
            </teleport>
        </h3>
    </div>
    

    渲染后

    <div id="app" data-v-app="">
        <h1>hello</h1>
        <h1>world</h1>
        <h3>
            <!--teleport start--><!--teleport end-->
            <!--teleport start--><!--teleport end-->
        </h3>
    </div>
    

    总结

    teleport在实际开发中是非常使用的,我们可以更方面的处理一些需求。

    比如我需要一个全屏功能但是,要在它的父级或者其他级显示,我们就可以用teleport。如果不用它,我们需要写很多复杂的逻辑来实现这个功能。


    起源地下载网 » 回首Vue3之组件篇(四)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元