基础案例

动态组件切换类比“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. SSH自动断开连接的原因-20200323

    SSH自动断开连接的原因   方法一: 用putty/SecureCRT连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦. 在网上查了很多资料, 发现原因有多种, 环境变量TMOUT ...

  2. Linux进阶之Linux破解密码、yum源配置、防火墙设置及源码包安装

    一.老师语录: 所有要求笔试的公司都是垃圾公司 笔试(是考所有的涉及到的点) 要有自己的卖点.专长(给自己个标签)(至少一个) 生产环境中,尽量使用mv(mv到一个没用的目录下),少使用rm 二.防火 ...

  3. Hutool :一个小而全的 Java 工具类库

    Hutool 简介 Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的 ...

  4. shell脚本编写习惯

    前言:在公众号看一篇比较不错的shell脚本文章,自己学习同时,加一些例子分享下,哪里做得不好,请多多指教哈一.在脚本写注释 1 #脚本的参数 2 #脚本的用途 3 #脚本的注意事项 4 #脚本的写作 ...

  5. 用virtualenv建立Python独立开发环境

    1.用pip安装virtualenv sudo apt-get install python-virtualenv 2.1 创建python2的虚拟环境,进入要创建虚拟环境的目录下,我是放在/home ...

  6. 重新整理 .net core 实践篇————配置系统——军令(命令行)[六]

    前言 前文已经基本写了一下配置文件系统的一些基本原理.本文介绍一下命令行导入配置系统. 正文 要使用的话,引入Microsoft.extensions.Configuration.commandLin ...

  7. Nginx 配置实例-配置虚拟主机

    Nginx 配置实例-配置虚拟主机 配置基于域名的虚拟主机 1. 配置域名为 aaa.domain.com 的虚拟主机 1.1 nginx 中虚拟主机的配置 1.2 相关目录及文件的创建 1.3 验证 ...

  8. pytest + allure

    参考allure官网: https://docs.qameta.io/allure/#_pytest 1.使用命令pip install pytest-allure安装 注意:我遇到的一个现象,用命令 ...

  9. 第一个 Angular 应用程序

    node download https://nodejs.org/zh-cn/ 全局安装 npm install @angular/cli -g 指定版本 npm install @angular/c ...

  10. 深度学习数据特征提取:ICCV2019论文解析

    深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...