vue 动态组件component

目录
  • 1、component
  • 2、keep-alive
    • 2.1存在的问题
    • 2.2使用keep-alive解决
    • 2.3keep-alive的生命周期
    • 2.4keep-alive 的 include, exclude属性

1、component

如何实现动态组件渲染

vue提供了一个内置的<component> ,专门用来实现动态组件的渲染。

这个标签就相当于一个占位符,需要使用is属性指定绑定的组件

<button @click="comName = 'Left'">展示Left</button>

<button @click="comName = 'Right'">展示Right</button>

<div class="box">

	<!-- 渲染Left组件和Right组件 -->

	<!-- component组件是Vue内置的 -->

	<!-- is表示要渲染的组件的名字 -->

	<component :is="comName"></component>

</div>

<script>

	import Left from '@/compeonents/Left.vue'

	import Right from '@/components/Right.vue'

	export default {

		components: {

			Left,

			Right

		},

		data() {

			return {

				//comName 表示要展示的组件的名字

				comName: Left,

			}

		}

	}

</script>

2、keep-alive

2.1存在的问题

当在Left组件中实现一个按钮加一的功能,加一操作后切换组件,再切回来

如下是Left中加一功能

<div class="left-container">

	<h3>Left 组件 ---- {{ count }}</h3>

	<button @click="count += 1">+1</button>

</div>

<script>

	export default {

		data(){

			return {

				count: 0

			}

		}

	}

</script>

操作,进行加一操作后切换到right组件,再切换回来,发现组件中的数据被重写初始化了

使用Vue的生命周期查看Left组件

如下是Left中添加生命周期函数

export default {

	created() {

		console.log('Left 组件被创建了!')

	},

	destoryed(){

		console.log('Left 组件被销毁了~')

	}

}

再次执行上诉操作后,得到的结果如下:

存在的问题: 在切换组件的同时会销毁和创建组件,这样每次切换到同一组件时得到的组件对象就不是同一个了,会重写初始化数据

2.2使用keep-alive解决

keep-alive 组件也是Vue内置的组件,可以直接使用

在App根组件中如下修改:

<keep-alive>

	<!-- keep-alive 可以把内部的组件进行缓存,而不是销毁组件 -->

	<component :is="comName"></component>

</keep-alive>

2.3keep-alive的生命周期

该生命周期,只有在组件使用了keep-alive时才能使用

deactivated当组件被缓存时,自动触发

actived当组件被激活时,自动触发

Left组件中添加如下修改

//当组件第一次被创建时,会先触发created,后触发activated

//当组件被激活时,只会触发activated,不触发created

activated() {

	console.log('组件被激活了,activated')

},

deactivated(){

	console.log('组件被缓存了,deactivated')

}

2.4keep-alive 的 include, exclude属性

keep-alive默认会缓存所有被keep-alive包裹的component里的组件

如何指定需要缓存的组件呢:

使用include / exclude 属性,不能同时使用

<keep-alive include="Left,MyRight">

	<component :is="comName"></component>

</keep-alive>

以上指定了需要缓存的组件名称: 注意这里的组件的名称

Left组件中:

export default{}

Right组件中:

export default{

	//当提供了name属性后,组件的名称就是name属性的值

	name: 'MyRight'

}

区分: 组件内name属性,和组件外注册名 的关系

组件外:

import Left '@/components/Left.vue'

components: {

	Left,

}

这里的注册名只用于组件的引用,如果组件内没有name属性那么name默认就是注册名

组件内:

export default{

	//当提供了name属性后,组件的名称就是name属性的值

	name: 'MyRight'

}

组件内声明了name属性该组件在调试工具中显示的标签就是该名称,标签中的缓存功能用到的也是该名称

到此这篇关于 vue 动态组件component 的文章就介绍到这了,更多相关 vue 动态组件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue 动态组件(component :is) 和 dom元素限制(is)用法说明

    一.is的使用 参考Vue 2.0教程,有讲到 is 的使用: 解析 DOM 模板时的注意事项 有些 HTML 元素,诸如 <ul>.<ol>.<table> 和 <select>,对于哪些元素可以出现在其内部是有严格限制的.而有些元素,诸如 <li>.<tr> 和 <option>,只能出现在其它某些特定的元素内部. 这会导致我们使用这些有约束条件的元素时遇到一些问题.例如: <table> <blog

  • Vue 动态组件components和v-once指令的实现

    一.实现两个组件间互相展示.互相隐藏 <!DOCTYPE html> <html> <head> <title>动态组件</title> <script type="text/javascript" src="./vue-dev.js"></script> </head> <body> <div id="app"> <ch

  • vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码

    具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="bower_components/vue/dist/vue.js"></script> <style> </styl

  • vue components 动态组件详解

    目录 总结 总结 数组发生变化时,动态加载相应数据 场景:点击不同组件名称,界面显示相应组件 步骤一:导入所需组件 步骤二:点击 tab 选项卡,将对应组件名添加进数组 步骤三:使用动态组件,:is 属性绑定组件名 <div v-for="(item, index) in componentData" :key="index"> <components :is="item.componentName"/> </div

  • vue 动态组件component

    目录 1.component 2.keep-alive 2.1存在的问题 2.2使用keep-alive解决 2.3keep-alive的生命周期 2.4keep-alive 的 include, exclude属性 1.component 如何实现动态组件渲染 vue提供了一个内置的<component> ,专门用来实现动态组件的渲染. 这个标签就相当于一个占位符,需要使用is属性指定绑定的组件 <button @click="comName = 'Left'"&g

  • Vue动态组件component标签的用法大全

    目录 简介 说明 官网网址 示例 路由设置 父组件 子组件 简介 说明 本文介绍Vue的动态组件的用法. 在Vue中,可以通过component标签的is属性动态指定标签,例如: <component :is="componentName"></component> 此时,componentName的值是什么,就会引入什么组件. 官网网址 https://v2.cn.vuejs.org/v2/guide/components.html#动态组件 示例 路由设置

  • Vue动态组件component的深度使用说明

    目录 背景介绍 组件封装 Vue动态组件 改造组件 Vue动态组件的理解 什么是动态组件 背景介绍 最近在封装一些基于Vue+ElementUI的组件,将一些实际项目中常用的,有一定规律的业务进行抽象总结,开发出相应的Vue组件. 组件封装 首先想到的就是Form组件,在Element UI提供的Form中,我们需要一个一个的去添加对用的FormItem <el-form ref="form" :model="form" label-width="8

  • vue动态组件实现选项卡切换效果

    本文实例为大家分享了vue动态组件实现选项卡切换的具体代码,供大家参考,具体内容如下 导航按钮: <div class="tab-title"> <p @click="a='tab1'"><router-link to='/collectnewcars'>新车</router-link><em></em></p> <p @click="a='tab2'"&g

  • Vue动态组件实例解析

    前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动态组件 <div id="example"> <button @click="change">切换页面</button> <component :is="currentView"></compon

  • Vue 动态组件与 v-once 指令的实现

    本文介绍了Vue 动态组件与 v-once 指令的实现,分享给大家,具体如下: <div id="root"> <child-one></child-one> <child-two></child-two> <button>change</button> </div> Vue.component('child-one', { template: `<div>child-one&l

  • Vue动态组件与异步组件实例详解

    本文实例讲述了Vue动态组件与异步组件.分享给大家供大家参考,具体如下: 1 在动态组件上使用 keep-alive 我们之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件: <component v-bind:is="currentTabComponent"></component> 当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题.例如我们来展开说一说这个多标签界面: 你会注意到,如果你选择了一篇文章,切换到

  • VUE 动态组件的应用案例分析

    本文实例讲述了VUE 动态组件的应用.分享给大家供大家参考,具体如下: 业务场景 我们在开发表单的过程中会遇到这样的问题,我们选择一个控件进行配置,控件有很多中类型,比如文本框,下来框等,这些配置都不同,因此需要不同的配置组件来实现. 较常规的方法是使用v-if 来实现,这样界面看上去比较复杂,而且需要进行修改主页面. 解决方案 可以使用动态组件来实现,为了体现动态组件的特性,我们简化实现方式,编写两个简单的组件来测试一下这个功能. 文本组件配置: <template> <div>

  • vue 动态组件用法示例小结

    本文实例讲述了vue 动态组件用法.分享给大家供大家参考,具体如下: 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,我们让多个组件可以使用同一个挂载点,并动态切换.根据 v-bind:is="组件名" 中的组件名去自动匹配组件,如果匹配不到则不显示. 改变挂载的组件,只需要修改is指令的值即可. <!DOCTYPE html> <html> <head> <meta charset="utf-

随机推荐