Vue高级语法(二) | 内置组件和了解Vue安装插件

导读:本篇文章讲解 Vue高级语法(二) | 内置组件和了解Vue安装插件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Vue中内置组件

🍤Teleport介绍

在组件化开发中,我们封装一个组件Hello World,在另外一个组件App中使用, 如下

  • hello-world组件
<template>
  <div class="hello-world">
    <h2>hello-world</h2>
  </div>
</template>
  • hello-world组件咋App中使用
<template>
  <div class="app">
    <div class="hello">
      <p class="content">
        <!-- 使用hello-world组件 -->
        <hello-world />
      </p>
    </div>
  </div>
</template>

那么组件Hello World中template的元素,会被挂载到组件App中template的p元素下面;

最终我们的应用程序会形成一颗DOM树结构, 如下图所示;

在这里插入图片描述

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

比如移动到body元素上,或者我们有其他的div#app之外的其他元素上;

这个时候我们就可以通过teleport内置组件来完成;

那么Teleport是什么呢?

它是一个Vue提供的内置组件,它类似于react的Portals;

teleport翻译过来是心灵传输、远距离运输的意思;

🍤Teleport使用

我们刚刚说过, Teleport可以指定内容挂载到那个元素上, TelePort它有两个属性

to:指定将其中的内容移动到的目标元素,可以使用选择器

disabled:是否禁用 teleport 的功能;

例如我们使用Teleport将刚刚的Hello World组件挂载到body元素中, 演示代码如下所示:

<template>
  <div class="app">
    <div class="hello">
      <p class="content">
        <!-- 使用Teleport管理hello-world组件 -->
        <teleport to="body">
          <hello-world />
        </teleport>
      </p>
    </div>
  </div>
</template>

代码效果如下图所示
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPPTLIc6-1659682987391)(img/Snipaste_2022-08-05_13-50-13.png)]

Teleport会将它标签中的内容, 挂载到to属性指定元素中, Teleport不仅仅是可以将组件挂载过去, 其他元素均可以

<template>
  <div class="app">
    <div class="hello">
      <p class="content">
        <teleport to="body">
          <h2>你好 哈哈哈</h2>
          <h2>你好 呵呵呵</h2>
        </teleport>
      </p>
    </div>
  </div>
</template>

在这里插入图片描述

大家应该会有疑惑, 如果我们将多个teleport应用到同一个目标上(to的值相同),那么这些目标会进行合并, 不会有覆盖的效果:

<template>
  <div class="app">
    <div class="hello">
      <p class="content">
        <!-- 第一个Teleport -->
        <teleport to="body">
          <h2>你好 哈哈哈</h2>
          <h2>你好 呵呵呵</h2>
        </teleport>
        <!-- 第二个Teleport -->
        <teleport to="body">
          <hello-world />
        </teleport>
      </p>
    </div>
  </div>
</template>

在这里插入图片描述

🍤Suspense组件

注意:Suspense组件虽然非常好用, 但是目前(2022-08-01) Suspense显示的是一个实验性的特性, API随时可能会修改

Suspense是一个内置的全局组件,该组件有两个插槽

default:如果default可以显示,那么显示default的内容;

fallback:如果default无法显示,那么会显示fallback插槽的内容;

<template>
  <div class="app">
    <suspense>
      <template #default>
        <async-home/>
      </template>
      <template #fallback>
        <h2>Loading</h2>
      </template>
    </suspense>
  </div>
</template>

Vue的安装插件

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

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

函数类型:一个function,这个函数会在安装插件时自动执行;

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

添加全局方法或者 property,通过把它们添加到 config.globalProperties 上实现;

添加全局资源:指令/过滤器/过渡等;

通过全局 mixin 来添加一些组件选项;

一个库,提供自己的 API,同时提供上面提到的一个或多个功能;

插件的编写方式

// 方式一: 传入对象的情况
// 传入对象, 会自动执行对象中的install函数, 并将app传入install对应的函数
app.use({
  install: function(app) {
    console.log("传入对象的install被执行:", app)
  }
})
// 方式二: 传入函数的情况
// 传入函数, 会直接执行传入的函数, 并将app传给该函数
app.use(function(app) {
  console.log("传入函数被执行:", app)
})

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120069.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!