在动态组件上使用keep-alive

我们之前曾经在一个多标签的界面中使用is特性来切换不同的组件:

Vue.js的动态组件模板

```

<component v-bind:is="currentTabComponent"></component>


<p>当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题。</p> ![](https://img2018.cnblogs.com/blog/1504257/201811/1504257-20181106165656138-118724572.png) <p>如上是vue官网的例子,你会注意到如果你选择一篇文章,切换到Archive标签,然后切回Posts, 是不会继续展示你之前选择的文章的。因为你每次切换新标签的时候,Vue都会创建一个新的<strong>currentTabComponent</strong>实例。</p>
<p>重新创建动态组件的行为通常是非常有用,但是在这个案例中,我们更希望那些标签的组件实例能够被它们第一次被创建的时候缓存下来,为了解决这个问题,我们可以用一个<strong>&lt;keep-alive&gt;</strong>元素将其动态组件包裹起来。</p>

//失活的组件将会被缓存

<keep-alive>

<component v-bind:is="currentTabComponent"></component>

</keep-alive>


<h3>异步组件</h3>
<p>在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的适合才从服务器加载一个模块。为了简化,Vue允许你以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。Vue只有在这个组件需要被渲染的时候才会触发该工厂函数,切会把结果缓存起来供未来重渲染:</p>

Vue.component('async-example', funcion(resolve, reject) {

setTimeout(function() {

//向resolve回调传递组件定义

resolve({

template: '<div>i am async</div>'

})

}, 1000)

})


<p>如你所见,这个工厂函数会收到一个resolve回调,这个回调函数会在你的服务器得到组件定义的时候被调用。你也可以调用reject来表示加载失败。这里的setTimeout是为了演示用,如何获取组件取决于你自己。一个推荐的做法就是将异步组件和webpack的code-slitting功能一起配合使用:</p>

Vue.component('async-webpack-example', function(resolve) {

// 这个特殊的 require 语法将会告诉 webpack

// 自动将你的构建代码切割成多个包,这些包

// 会通过 Ajax 请求加载

require(['./my-async-component'], resolve)

})


<p>你也可以在工厂函数中返回一个Promise,所以把webpack2和ES2015语法加在一起,我们可以写成这样:</p>

Vue.component(

'async-webpack-example',

() => import('./my-async-component')

)


<p>当使用局部注册的适合,你也可以直接提供一个返回Promise的函数:</p>

new Vue({

components: {

'my-component': () => import('./my-async-component')

}

})


<h4>处理加载状态 2.3.0新增</h4>
<p>这里的异步组件工厂函数也可以返回一个如下格式的对象:</p>

const AsyncComponent = () => ({

// 需要加载的组件 (应该是一个 Promise 对象)

component: import('./MyComponent.vue'),

// 异步组件加载时使用的组件

loading: LoadingComponent,

// 加载失败时使用的组件

error: ErrorComponent,

// 展示加载时组件的延时时间。默认值是 200 (毫秒)

delay: 200,

// 如果提供了超时时间且组件加载也超时了,

// 则使用加载失败时使用的组件。默认值是:Infinity

timeout: 3000

})


<p><strong>注意如果你希望在 Vue Router 的路由组件中使用上述语法的话,你必须使用 Vue Router 2.4.0+ 版本。</strong></p> 原文地址:https://segmentfault.com/a/1190000016905330

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

  1. Vue动态注册异步组件(非同一个工程的组件)

    前言:最近在掘金逛的时候,无意中看到前滴滴前端架构黄轶大佬,看到了大佬分享的一篇博客滴滴 webapp 5.0 Vue 2.0 重构经验分享 ,对于其中第5个问题(异步加载的业务线组件,如何动态注册? ...

  2. vue动态加载组件

    vue动态加载组件,可以使用以下方式 <component :is="propertyname" v-for="tab in tabs"></ ...

  3. vue深入了解组件——动态组件&异步组件

    一.在动态组件上使用 keep-alive 我们之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件: <component v-bind:is="currentTabComp ...

  4. vue组件---动态组件&异步组件

    (1)在动态组件上使用keep-alive 之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件.接下来简单回顾下 <component>元素是vue 里面的一个内置组件.在里面使 ...

  5. Vue - 动态组件 & 异步组件

    动态组件 <div id="app"> <components :is="com[2]"></components> < ...

  6. 七、vue语法补充二(动态组件 & 异步组件、访问元素 & 组件、混入)

    1..sync 修饰符 2.3.0+ 新增 vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定.类似于v-model的效果 例子: this.$ ...

  7. 学习笔记:Vue——动态组件&异步组件

    动态组件 01.在动态组件上使用keep-alive,保持组件的状态,以避免反复重渲染导致的性能问题. <!-- 失活的组件将会被缓存!--> <keep-alive> < ...

  8. 深入了解组件- -- 动态组件 & 异步组件

    gitHub地址:https://github.com/huangpna/vue_learn/example里面的lesson11 一 在动态组件上使用keep-alive 在这之前我们已经有学习过用 ...

  9. vue -- 动态加载组件 (tap 栏效果)

    在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件. 因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使 ...

随机推荐

  1. android studio中xml文件代码提示问题

    在系统控件中输入“a”能提示出android:id等所有属性.而在第三方库的控件中输入“a”只会提示“appNs”,但如果手动写app:id="@+id/aaa"系统也是可以识别的 ...

  2. YTU 2734: 国家排序

    2734: 国家排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 133  解决: 84 题目描述 世界格局动荡不安,10国紧急召开会议磋商对策.有些国家斤斤计较,参会代表的座位如何排 ...

  3. java网络编程UDP

    图片来自网络 [发送端] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSoc ...

  4. Gold Coins

    http://poj.org/problem?id=2000 #include<stdio.h> ; int main() { int coin[N]; ,j,k; j = ; k = ; ...

  5. ZOJ3714JavaBeans

    #!/usr/bin/env python # encoding: utf-8 t = int(raw_input()) for i in range(t): n,k = [int(x) for x ...

  6. IIS: 响应消息的内容类型 text/html; charset=utf-8 与绑定(text/xml; charset=utf-8)的内容类型不匹配。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法

    以前好好的项目,突然出现了这个问题.一顿google后无果,有人说是程序池的原因,有人说是安全配置的原因,照着网上方法试了多次,还是没有解决.如下图: 突然发现了一片文章 (https://www.j ...

  7. PHP魔术法__set和__get

    __set: 在给不可访问属性赋值时,__set() 会被调用.语法如下: public void __set ( string $name , mixed $value ) __get: 读取不可访 ...

  8. SQL练习题_用户购买收藏记录合并(拼多多)

    目录 拼多多笔试题0805_统计用户数据 笔试题描述 表格构建 数据观察 题目分析 一.合并表格 二.CASE表示(0,1) 三.同理复制FORK表 题目解答 拼多多笔试题0805_统计用户数据 笔试 ...

  9. html5——:hover事件触发自己的:afert伪元素事件

    :hover事件触发自己的:afert伪元素事件中间是没有空格的

  10. html5——文本阴影

    基本结构 text-shadow: 30px 23px 31px #;/* 文字阴影: 水平位移 垂直位移 模糊程度 阴影颜色*/ 凹凸文字 <!DOCTYPE html> <htm ...