Vue动态组件的实现is vs extend

1. is属性指定组件名
首先引入所有将要使用的组件并进行局部组件注册,然后动态指定组件的名字即可实现动态组件的切换

<template>
	<div>
		<component :is="componentName"></component>
	</div>
<template>
<script>
export default {
	data() {
		return {
			componentName: '***'
		}
	},
	components: {
		componentName1: () => import('**/**/**.vue')
		componentName2: () => import('**/**/**.vue')
		// 需要用的组件全部引入,难受的很
		componentName3: () => import('**/**/**.vue')
	}
}
</script>

2. extend 创建动态组件
使用基础 Vue 构造器,创建一个“子类”,参数是一个包含组件选项的对象。所以使用的时候需要new实例化,然后设置挂载节点el或者借助$mount() 进行挂载。

    getComponent() {
      const name = 'DynamicComponent'
      import(`../components/${name}.vue`).then(component => {
        // component 包裹在defualt内
        const Component = Vue.extend(component.default)
        new Component({
          el: this.$refs.dynamic_component,
          data: function() {
            return {
              name: '我是通过extend构造器生成的动态组件'
            }
          }
        })
      })
    }

3. extend 创建异步组件
根据请求接口返回的template生成对应的组件

generateAsyncComponent() {
	generateAsyncComponent().then(template => {
		Vue.extend({
		  template,
		  data: function() {
		     return {
		       name: '构造器-异步组件'
		     }
		  }
		});
	})
}
 
// 全局注册
Vue.component('global-component', globalComponent)

// 局部注册包含两种方式进行挂载 el 和 $mount()
new globalComponent().$mount(this.$refs.mount_point)
new globalComponent({ el: this.$refs.mount_point})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值