基础案例

动态组件切换类比“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. k8s管理机密信息(12)

    一.启动应用安全信息的保护 1.Secret介绍 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  2. 10.27-Redis-mz 深入浅出Redis

    深入浅出Redis 1.Redis的发展史     Redis[Remote Directory Server]:远程服务器字典 2.下载安装Redis 1>Linux下安装Reids     ...

  3. addrinfo结构体原型-(转自 cxz2009)

    addrinfo结构体原型 typedef struct addrinfo {    int ai_flags;        //AI_PASSIVE,AI_CANONNAME,AI_NUMERIC ...

  4. 揭秘有状态服务上 Kubernetes 的核心技术

    背景 随着 Kubernetes 成为云原生的最热门的解决方案,越来越多的传统服务从虚拟机.物理机迁移到 Kubernetes,各云厂商如腾讯自研上云也主推业务通过Kubernetes来部署服务,享受 ...

  5. Nginx_学习笔记

    Nginx_学习笔记 01-Nginx 课程介绍 02-Nginx 的简介 1. 什么是 Nginx ? 03-Nginx 相关概念(正向和反向代理) 1. 什么是反向代理?能否简要画出其示意图 2. ...

  6. GO语言面向对象08---投胎游戏

    package main import ( "fmt" "math/rand" "os" "time" ) /* @内存 ...

  7. Go语言的函数06---闭包函数

    package main import "fmt" /* 李逵和武松的Study方法的逻辑是几乎一模一样的 然而为了分别保存两人的学习进度,需要开辟两个全局变量,函数内部的需要使用 ...

  8. springboot中引入zookeeper,生成 配置类

    1.application.properties zookeeper.address=@mvn.zookeeper.address@ zookeeper.namespace=@mvn.zookeepe ...

  9. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  10. 关于Numba的线程实现的说明

    关于Numba的线程实现的说明 由Numbaparallel目标执行的工作由Numba线程层执行.实际上,"线程层"是Numba内置库,可以执行所需的并发执行.在撰写本文时,有三个 ...