vue3新增Teleport的问题

目录
  • vue3新增Teleport
  • vue3 Teleport和插件的认识与了解
    • 一、认识Teleport
    • 二、和组件结合使用
    • 三、多个teleport
    • 四、认识Vue插件
    • 五、插件的编写方式

vue3新增Teleport

在开始介绍Teleport之前先了解一下React的Portals特性。

Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案。

ReactDOM.createPortal(child, container)

第一个参数(child)是任何可渲染的 React 子元素,例如一个元素,字符串或 fragment。第二个参数(container)是一个 DOM 元素。

通常来讲,当你从组件的 render 方法返回一个元素时,该元素将被挂载到 DOM 节点中离其最近的父节点:

render() {
  // React 挂载了一个新的 div,并且把子元素渲染其中
  return (
    <div>
      {this.props.children}
    </div>
  );
}

然而,有时候将子元素插入到 DOM 节点中的不同位置也是有好处的:

render() {
  // React 并*没有*创建一个新的 div。它只是把子元素渲染到 `domNode` 中。
  // `domNode` 是一个可以在任何位置的有效 DOM 节点。
  return ReactDOM.createPortal(
    this.props.children,
    domNode
  );
}

一个 portal 的典型用例是当父组件有 overflow: hidden 或 z-index 样式时,但你需要子组件能够在视觉上“跳出”其容器。例如,对话框、悬浮卡以及提示框。常见的情况是创建一个包含全屏模式的组件。

对话框 position: absolute 的定位相对于父 div 作为参考。Teleport 提供了一种简单的方法,使我们可以控制要在DOM中哪个父对象下呈现HTML。

<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>

多个 <teleport> 组件可以将其内容添加到同一目标元素。

vue3 Teleport和插件的认识与了解

一、认识Teleport

在组件化开发中,我们封装一个组件A,在另外一个组件B中使用

  • 那么组件A中template的元素,会被挂载到组件B中template的某个位置
  • 最终我们的应用程序会形成一颗DOM树结构

但是某些情况下,我们希望组件不是挂载在这个组件树上的,可能是移动到Vue app之外的其他位置

  • 比如移动到body元素上,或者我们有其他的div#app之外的元素上
  • 这个时候我们就可以通过teleport来完成

Teleport是什么呢?

  • 它是一个Vue提供的内置组件,类似于react的Portals
  • teleport翻译过来是心灵传输、远距离运输的意思
  • 它有两个属性
  • to:指定将其中的内容移动到的目标元素,可以使用选择器
  • disabled:是否禁用 teleport 的功能

我们来看下面代码的效果:

二、和组件结合使用

当然,teleport也可以和组件结合一起来使用

我们可以在 teleport 中使用组件,并且也可以给他传入一些数据

三、多个teleport

如果我们将多个teleport应用到同一个目标上(to的值相同),那么这些目标会进行合并

四、认识Vue插件

通常我们向Vue全局添加一些功能时,会采用插件的模式,它有两种编写方式

  • 对象类型:一个对象,但是必须包含一个 install 的函数,该函数会在安装插件时执行
  • 函数类型:一个function,这个函数会在安装插件时自动执行

插件可以完成的功能没有限制,比如下面的几种都是可以的

  • 添加全局方法或者 property,通过把它们添加到 config.globalProperties 上实现
  • 添加全局资源:指令/过滤器/过渡等
  • 通过全局 mixin 来添加一些组件选项
  • 一个库,提供自己的 API,同时提供上面提到的一个或多个功能

五、插件的编写方式

这里编写两个插件示例,看一下怎么写和用

对象类型的写法

函数类型的写法

在main.js中通过use使用这两个插件

然后就可以在全局使用$name属性了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Vue3中Teleport的使用

    在本文中,我们将介绍: Teleport 的目的 Teleport 的例子 一些很有意思的代码交互 Teleport 的目的 首先是什么时候以及使用这个 Teleport 功能. 在开发较大的 Vue 项目时应该以可重用的逻辑去组织代码.但是当处理某些类型的组件(如模式.通知或工具提示)时,模板 HTML 的逻辑可能不会和我们希望渲染元素处于相同的文件中. 实际上在大多数情况下,与 Vue 的 DOM 完全分开处理相比,处理这些元素要容易得多.因为嵌套组件的位置.z-index 和样式等这些东西

  • 详解Vue3 Teleport 的实践及原理

    Vue3 的组合式 API 以及基于 Proxy 响应式原理已经有很多文章介绍过了,除了这些比较亮眼的更新,Vue3 还新增了一个内置组件: Teleport.这个组件的作用主要用来将模板内的 DOM 元素移动到其他位置. 使用场景 业务开发的过程中,我们经常会封装一些常用的组件,例如 Modal 组件.相信大家在使用 Modal 组件的过程中,经常会遇到一个问题,那就是 Modal 的定位问题. 话不多说,我们先写一个简单的 Modal 组件. <!-- Modal.vue --> <

  • vue2如何实现vue3的teleport

    目录 vue2实现vue3的teleport vue3新特性teleport介绍 teleport是什么 teleport怎么使用 vue2实现vue3的teleport 不支持同一目标上使用多个teleport(代码通过v-if就能实现) 组件 <script>     export default {         name: 'teleport',         props: {             /* 移动至哪个标签内,最好使用id */             to: {

  • Vue3内置组件Teleport使用方法详解

    目录 1.Teleport用法 2.完成模态对话框组件 3.组件的渲染 前言: Vue 3.0 新增了一个内置组件 teleport ,主要是为了解决以下场景: 有时组件模板的一部分逻辑上属于该组件,而从技术角度来看,最好将模板的这一部分移动到 DOM 中 Vue app 之外的其他位置 场景举例:一个 Button ,点击后呼出模态对话框 这个模态对话框的业务逻辑位置肯定是属于这个 Button ,但是按照 DOM 结构来看,模态对话框的实际位置应该在整个应用的中间 这样就有了一个问题:组件的

  • vue3 teleport的使用案例详解

    官网 https://cli.vuejs.org/zh/guide/ 有时组件模板的一部分逻辑上属于该组件,而从技术角度来看,最好将模板的这一部分移动到 DOM 中 Vue app 之外的其他位置. 案例 这两个组件都是在父元素里的,是父组件的子级,但是从技术角度来看,他们是应该是挂载在body下面的 未修改版 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&g

  • vue3 Teleport瞬间移动函数使用方法详解

    vue3 Teleport瞬间移动函数的使用,供大家参考,具体内容如下 Teleport一般被翻译成瞬间移动组件,实际上是不好理解的.我把他理解成"独立组件" 他可以那你写的组件挂载到任何你想挂载的DOM上,所以是很自由很独立的 以一个例子来看:编写一个弹窗组件 <template> <teleport to="#modal"> <div id="center" v-if="isOpen">

  • vue3新增Teleport的问题

    目录 vue3新增Teleport vue3 Teleport和插件的认识与了解 一.认识Teleport 二.和组件结合使用 三.多个teleport 四.认识Vue插件 五.插件的编写方式 vue3新增Teleport 在开始介绍Teleport之前先了解一下React的Portals特性. Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案. ReactDOM.createPortal(child, container) 第一个参数(child)是任何可渲染

  • 基于vue3.0.1beta搭建仿京东的电商H5项目

    前言 就在前段时间,vue官方发布了3.0.0-beta.1 版本,趁着五一假期有时间,就把之前的一个电商商城的项目,用最新的Composition API拿来改造一下! GitHub地址请访问:https://github.com/GitHubGanKai/vue3-jd-h5 项目介绍 vue-jd-h5是一个电商H5页面前端项目,基于Vue 3.0.0-beta.1 + Vant 实现,主要包括首页.分类页面.我的页面.购物车等. 本地线下代码vue2.6在分支demo中,使用mockjs

  • vue3为什么要用proxy替代defineProperty

    在这之前,我们得先了解下vue的核心理念mutable 不管是vue2还是vue3,在实现的过程中,核心概念一直保持稳定,以可变数据源为核心的理念,来实现整个UI变动更新 用最简单的讲法就是:初始化数据生成了页面,直接修改源数据触发更新,页面重新渲染 关注vue的人都知道,vue3里面使用了proxy替换了defineProperty, 在使用vue2的时候,我们经常会碰到一个问题,添加新的对象属性obj.a = 1会无法被vue2劫持,必须使用vue2提供的$set方法来进行更新 这个的原因想

  • vue3.0搭配.net core实现文件上传组件

    在开发Web应用程序中,文件上传是经常用到的一个功能. 在Jquery时代,做上传功能,一般找jQuery插件就够了,很少有人去探究上传文件插件到底是怎么做的. 简单列一下我们要做的技术点和功能点 使用技术 客户端使用vue.js 3.0,并使用vue3新增的功能:Composition API ,服务器使用asp.net core 功能点 标签美化 文件预览 文件上传 服务器接收文件 文件选择美化 在标准的html文件选择标签,是十分不美观的.大概就是下图的样子 但是我们的设计师的设计图可不是

  • vue3 与 vue2 优点对比汇总

    目录 优点1:diff算法的优化 优点2:hoistStatic 静态提升 优点3:cacheHandlers 事件侦听器缓存 优点4:ssr渲染 优点5:更好的Ts支持 优点6:Compostion API: 组合API/注入API 优点7:更先进的组件 优点8:自定义渲染API 优点9:按需编译,体积比vue2.x更小 优点10:支持多根节点组件 ​​​​​​摘要: Vue3新版本的理念成型于 2018 年末,当时的 Vue 2 已经有两岁半了.比起通用软件的生命周期来这好像也没那么久,Vu

  • vue3.0手动封装分页组件的方法

    本文实例为大家分享了vue3.0手动封装分页组件的具体代码,供大家参考,具体内容如下 1.父组件引入 src/views/goods/components/goods-comment.vue <!-- page表示初始化分页时,默认显示第几页 --> <XtxPagination @change-page='changePage' :pagesize='reqParams.pageSize' :total='total' :page='1' /> //调接口 import {fin

  • 使用Vue3进行数据绑定及显示列表数据

    目录 一.与 Vue2 对比 1. Vue3 新特性 2. Vue2.Vue3 响应原理对比 3.重写数组的方法,检测数组变更 4.直观感受 二.使用Vue3进行数据绑定示例 1.使用ref实现数据绑定 2.使用reactive实现数据绑定 三.写在最后 一.与 Vue2 对比 1. Vue3 新特性 数据响应重新实现( ES6 的 proxy 代替 Es5 的 Object.defineProperty ) 源码使用 ts 重写,更好的类型推导 虚拟 DOM 新算法(更快,更小) 提供了 co

  • Vue3 (五)集成HTTP库axios详情

    目录 一.安装 axios 二.axios的使用 1.在主页中引用 axios 2.重新启动服务 3.何为跨域? 4.解决跨域问题 5.重新启动后端服务,再次访问 三.结论 一.安装 axios npm install axios@0.21.0 --save 二.axios的使用 1.在主页中引用 axios 在Vue3新增了setup初始化方法,所以我们在这里开始使用并测试,示例代码如下: <template> <a-layout> <a-layout-sider widt

随机推荐