Vue 动态组件和异步组件
基础案例
动态组件切换类比“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 动态组件和异步组件的更多相关文章
- Vue动态加载异步组件
背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,if ...
- vue2组件之异步组件...resolve
看开源项目的时候看到这样的用法: 发现与之前定义组件的方式不一样,这个resolve又是什么? 原来这个是vue的异步组件实现,可以看这里:<异步组件> 异步组件的需求: 在大型应用中,我 ...
- vue 组件高级用法(递归组件,内联模板,动态组件,异步组件)
- Vue中异步组件(结合webpack,转载)
转载,原文出处:https://www.jianshu.com/p/40a364b5e964 1.什么是异步组件? 异步组件就是定义的时候什么都不做,只在组件需要渲染(组件第一次显示)的时候进行加载渲 ...
- Vue异步组件Demo
Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...
- Vue.js 源码分析(二十七) 高级应用 异步组件 详解
当我们的项目足够大,使用的组件就会很多,此时如果一次性加载所有的组件是比较花费时间的.一开始就把所有的组件都加载是没必要的一笔开销,此时可以用异步组件来优化一下. 异步组件简单的说就是只有等到在页面里 ...
- 揭开Vue异步组件的神秘面纱
简介 在大型应用里,有些组件可能一开始并不显示,只有在特定条件下才会渲染,那么这种情况下该组件的资源其实不需要一开始就加载,完全可以在需要的时候再去请求,这也可以减少页面首次加载的资源体积,要在Vue ...
- vue按需加载组件,异步组件
说实话,我一开始也不知道什么叫按需加载组件,组件还可以按需加载???后来知道了 学不完啊...没关系,看我的 按需加载组件,或者异步组件,主要是应用了component的 is 属性 template ...
- vue-learning:32 - component - 异步组件和工厂函数
异步组件 只有在这个组件需要使用的时候才从服务器加载这一个组件模块,用于渲染,并且会把结果缓存起来供未来复用. 实现方法: 组件定义的时候,以一个工厂函数的形式传入,在需要组件的执行这个函数,然后将组 ...
随机推荐
- 分析Red Hat sosreport输出的方法
分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...
- rpm包名详解-rpm命令使用方法
linux软件包管理-rpm mount # 挂载 1.将光盘镜像插入光驱 2.创建挂载目录 mkdir /guangqu 3.挂载到/guangqu [root@gong ~]# mount /de ...
- 10.20 host:域名查询工具
host命令 是用于查询DNS的工具,它可以将指定主机名称转换为IP地址. host命令的参数选项及说明 -a 显示详细的DNS信息-t 指定查询的域名信息类型,可以是"A".&q ...
- SystemVerilog 激励发生器
simulator(激励发生器) 主要来的职责是模拟与DUT相邻设计的接口协议,只需要关注如何模拟接口信号,时期能够以真实的接口协议来发送激励给DUT. simolator不应该违反协议,但是不约束于 ...
- Linux - last 命令
前言 为啥写这篇?因为听 grep.sed 教程的时候有这个命令 栗子 加上工作中,运维给我排查问题的时候也用到了,感觉挺重要,先了解为敬! 命令作用 显示上次登录用户的列表 这个是在 Linux 下 ...
- Python+Selenium学习笔记3 - 二维码生成
用qrcode模块生成二维码 # coding = utf-8 import qrcode qr = qrcode.QRCode( version=1, error_correction=qrcode ...
- Jmeter——元件扩展,使其功能更全面
工具扩展 在之前的博文中,有介绍自定义函数.Java请求扩展,博文如下: Jmeter二次开发--基于Java请求 Jmeter二次开发--自定义函数 上述内容,是按自己的需要来进行针对性扩展,从而实 ...
- 构建可扩展的GPU加速应用程序(NVIDIA HPC)
构建可扩展的GPU加速应用程序(NVIDIA HPC) 研究人员.科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性 ...
- 24GHz和77GHz毫米波雷达技术细节
24GHz和77GHz毫米波雷达技术细节 FMCW Radar Sensitivity Measurement Tech Field Test and Raw Data Analysis Capabi ...
- 面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置
今天去看牙医,他问我年级轻轻牙齿怎么磨损这么严重?我说,没有人点赞的这些年,我都是咬着牙过来的. Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的 ...