基础案例

动态组件切换类比“bilibili-个人中心”的横向菜单切换不同的标签页的功能。

在Vue中可以使用 component 标签,并加一个特殊的属性(attribute) is来实现动态组件的切换。is需要一个组件的名称才能实现切换。

<div id="app">
<!-- 点击按钮,切换is的值 -->
<button @click="change">切换组件</button>
<!-- 绑定is,给一个组件名称 -->
<component v-bind:is="components[index]"></component>
</div>
<script>
Vue.component('student-list', {
// 省略...
}) Vue.component('teacher-list', {
// 省略...
}) let vm = new Vue({
el: '#app',
data: function () {
return {
index: 0,
components: ['student-list', 'teacher-list']
}
},
methods: {
change() {
this.index++
if (this.index === this.components.length) this.index = 0
}
}
})
</script>

在浏览器中的效果:

keep-alive

当在这些组件之间切换的时候,有时会想保持这些组件的状态,希望组件实例能够被在它们第一次被创建的时候缓存下来,以避免反复重渲染导致的性能问题,那么就可以在component外面加一层keep-alive标签。

<div id="app">
<button @click="change">切换组件</button>
<!-- keep-alive保持组件的状态 -->
<keep-alive>
<component v-bind:is="components[index]"></component>
</keep-alive>
</div>
<script>
Vue.component('user-signin', {
// 省略...
}) Vue.component('user-signup', {
// 省略...
}) let vm = new Vue({
el: '#app',
data: () => {
return {
index: 0,
components: ['user-signin', 'user-signup']
}
},
methods: {
change() {
this.index++
if (this.index === this.components.length) this.index = 0
}
}
})
</script>

在浏览器中的效果:

在component标签外套上一层keep-alive之后再切换组件,就不会失去之前的输入状态。

异步组件

应用程序功能不停地增加,核心页面承载太多的组件,如果一次性需要渲染所有的组件,会花费大量时间去做这项工作,这会大大降低用户的体验和心情。我们可能只在需要的时候才从服务器加载一个组件。

<div id="app">
<compo-one></compo-one>
<compo-two></compo-two>
</div>
<script>
const compoOne = {
name: 'compo-one',
template: `<h1>compo-one</h1>`
} let vm = new Vue({
el: '#app',
components: {
compoOne,
// 在局部组件中使用工厂函数方式定义组件
compoTwo: (resolve, reject) => {
setTimeout(() => {
// 定义模板内容
resolve({
template: '<h2>compoTwo加载完成,用时1秒</h2>'
})
}, 1000)
}
}
})
</script>

在浏览器中的效果:

Vue 动态组件和异步组件的更多相关文章

  1. Vue动态加载异步组件

    背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,if ...

  2. vue2组件之异步组件...resolve

    看开源项目的时候看到这样的用法: 发现与之前定义组件的方式不一样,这个resolve又是什么? 原来这个是vue的异步组件实现,可以看这里:<异步组件> 异步组件的需求: 在大型应用中,我 ...

  3. vue 组件高级用法(递归组件,内联模板,动态组件,异步组件)

  4. Vue中异步组件(结合webpack,转载)

    转载,原文出处:https://www.jianshu.com/p/40a364b5e964 1.什么是异步组件? 异步组件就是定义的时候什么都不做,只在组件需要渲染(组件第一次显示)的时候进行加载渲 ...

  5. Vue异步组件Demo

    Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...

  6. Vue.js 源码分析(二十七) 高级应用 异步组件 详解

    当我们的项目足够大,使用的组件就会很多,此时如果一次性加载所有的组件是比较花费时间的.一开始就把所有的组件都加载是没必要的一笔开销,此时可以用异步组件来优化一下. 异步组件简单的说就是只有等到在页面里 ...

  7. 揭开Vue异步组件的神秘面纱

    简介 在大型应用里,有些组件可能一开始并不显示,只有在特定条件下才会渲染,那么这种情况下该组件的资源其实不需要一开始就加载,完全可以在需要的时候再去请求,这也可以减少页面首次加载的资源体积,要在Vue ...

  8. vue按需加载组件,异步组件

    说实话,我一开始也不知道什么叫按需加载组件,组件还可以按需加载???后来知道了 学不完啊...没关系,看我的 按需加载组件,或者异步组件,主要是应用了component的 is 属性 template ...

  9. vue-learning:32 - component - 异步组件和工厂函数

    异步组件 只有在这个组件需要使用的时候才从服务器加载这一个组件模块,用于渲染,并且会把结果缓存起来供未来复用. 实现方法: 组件定义的时候,以一个工厂函数的形式传入,在需要组件的执行这个函数,然后将组 ...

随机推荐

  1. Linux_配置加密的https

    一.配置https 1.安装好httpd服务后,安装mod_ssl模块 //首先查看是否安装mod_ssl [root@localhost ~]# rpm -qa | grep mod_ssl //安 ...

  2. IT菜鸟之虚拟机VMware的安装

    老师说过,如果想学好Linux,最好不要在实体机上安装Linux,因为学习需要经常折腾,在实体机上做实验,出现故障就要重新安装,这样绝大多数时间都会浪费在安装上. 这时我们需要一个工具,它就是虚拟机. ...

  3. 【备忘】ffmpeg推流命令

    1 组播推流 ffmpeg -re -i "D:\\OTT\\adghg2323.mp4" -vcodec libx264 -vprofile baseline -level 30 ...

  4. 2.1PyCharm 的初始设置

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  5. Angular环境搭建及简单体验

    一.安装开发环境 npm install -g typescript npm install -g @angular/cli 二.创建hello-world项目 创建项目 ng new angular ...

  6. F5 BIG-IQ 8.0 发布 - 借助一个统一的管理平台,管理您的所有 BIG-IP 设备和服务

    针对完整可见性和控制的 BIG-IQ 集中式管理 BIG-IP 设备和服务的端到端控制 高效管理(编排.可见性和合规性)依赖于跨本地和云部署中始终如一的应用服务和安全策略.利用独立统一的管理平台实现对 ...

  7. 七、.net core(.NET 6)使用Serilog进行配置和实现日志记录

    使用Serilog来实现日志记录 先安装Serilog六件套神装包: 也可以对个别相应的包进行删除等,都是可以的.例如,标注的1是读取配置文件的,如果不需要通过配置文件进行操作,就可以使用这个包.2是 ...

  8. 处理SpringMVC中遇到的乱码问题

    乱码在日常开发写代码中是非常常见的,以前乱码使用的是通过设置一个过滤器解决, 现在可以使用SpringMVC给提供的过滤器,在web.xml设置,这比我们自己写的过滤器强大的的多. 注意:每次修改了x ...

  9. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  10. 在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation

    在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation news: yolov5 support 引论 该项目是nvidia官方yolo-tensorrt的封装 ...