18. 动态组件和异步组件

使用is可以切换组件

我们可以使用is来动态的切换组件:

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

当data中的componentName的值改变的时候就会切换componentName代表的组件,如component1。

动态组件上使用keep-alive

如果我们直接切换component的话,一般情况会删除前一个组件,加载后面的组件,从而导致前一个组件的状态会重置,重新切回来的时候组件1会初始化。
使用keep-alive标签的话就可以保证组件会被缓存起来——

<keep-alive>
          <component v-bind:is="componentName"></component>
          
      </keep-alive>
Vue.component("async-component",function(resolve,reject){
        setTimeout(function() {
          resolve({
            template:"<div>异步加载div</div>"
          })
        }, 2000);
      })
      var conponent1 = {
        template: `<div @click="clickEvent">
      这里是组件1,点击数量为{{count}}
      </div>
      
      `,
        data: function() {
          return {
            count: 0
          };
        },
        methods: {
          clickEvent: function() {
            this.count++;
          }
        }
      };

      var conponent2 = {
        template: `<div @click="clickEvent">
      这里是组件2,点击数量为{{count}}
      </div>
      
      `,
        data: function() {
          return {
            count: 0
          };
        },
        methods: {
          clickEvent: function() {
            this.count++;
          }
        }
      };
      var vm = new Vue({
        el: ".apps",
        data: {
          componentName: "conponent1"
        },
        components: {
          conponent1,conponent2
        },
        methods: {
          clickEvent: function() {
            if(this.componentName=="conponent1"){
              Vue.set(vm,"componentName","conponent2")
            }else{
              Vue.set(vm,"componentName","conponent1")
            }
           
          }
        }
      });

这样就能保存状态切换组件了。

异步组件

组件创建可以使用Promise方式

Vue.component('async-example', function (resolve, reject) {
  setTimeout(function () {
    // 向 `resolve` 回调传递组件定义
    resolve({
      template: '<div>I am async!</div>'
    })
  }, 1000)
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 13,153评论 0 13
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 6,644评论 0 6
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,006评论 0 25
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,452评论 0 29
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 9,233评论 5 14