VUE动态组件component以及<keep-alive>

component

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>动态组件</title>
 8 </head>
 9 <body>
10     <div id="app">
11      
12         <button @click=‘chgComponent("componentOne")‘>组件1</button >
13         <button @click=‘chgComponent("componentTwo")‘>组件2</button>
14         <button  @click=‘chgComponent("componentThree")‘>组件3</button>
15         <!--动态组件 ,更具is的值来确定渲染哪个组件 -->
16         <component :is="componentId"></component>
17     </div>
18 <script src="./vue.js"></script>
19 <script>
20
21     Vue.component(‘componentOne‘,{
22         template:  `
23
24             <div>组件1</div>
25
26         `
27     })
28     Vue.component(‘componentTwo‘,{
29         template:  `
30
31             <div>组件2</div>
32
33         `
34     })
35     Vue.component(‘componentThree‘,{
36         template:  `
37
38             <div>组件3</div>
39
40         `
41     })
42     new Vue({
43         el: ‘#app‘,
44         data() {
45             return {
46                 componentId: ‘componentOne‘
47             }
48         },
49         methods: {
50             chgComponent: function(componentId){
51
52                 this.componentId = componentId
53             }
54         },
55     })
56 </script>
57 </body>
58 </html>

注意:component动态组渲染组件时,当切换组件后,之前的组件会被销毁,用户之前在该组件的数据也会被清除,所以我们会使用<keep-alive>包裹动态组件,此时失活的组件会被缓存,当它被在此渲染的时候能够保留之前用户的数据

Keep-alive

  • Props:

    • include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
    • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
    • max - 数字。最多可以缓存多少组件实例。
  • 用法:

    <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。

    当组件在 <keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>动态组件</title>
 8 </head>
 9 <body>
10     <div id="app">
11
12         <button @click=‘chgComponent("componentOne")‘>组件1</button >
13         <button @click=‘chgComponent("componentTwo")‘>组件2</button>
14         <button  @click=‘chgComponent("componentThree")‘>组件3</button>
15
16         <!--
17             1.include: 表示会缓存所写入的数组
18             2.exclude:表示不缓存所写入的组件
19             3.max:表示最大缓存组件的个数,其值等于当前组件加历史组件个数的和,如果这个数大于max的则缓存最近使用的max个组件。
20          -->
21
22        <!-- 失活组件会被缓存,注意 include后面的值不能由空格 -->
23         <keep-alive include= ‘componentOne,componentTwo‘>
24              <!--动态组件 ,更具is的值来确定渲染哪个组件 -->
25                 <component :is="componentId"></component>
26         </keep-alive>
27
28         <!-- 失活组件会被缓存,注意 exclude后面的值不能由空格 -->
29         <keep-alive exclude= ‘componentOne,componentTwo‘>
30              <!--动态组件 ,更具is的值来确定渲染哪个组件 -->
31                 <component :is="componentId"></component>
32         </keep-alive>
33
34         <!-- 失活组件会被缓存,注意 exclude后面的值不能由空格 -->
35         <keep-alive max= ‘2‘>
36              <!--动态组件 ,更具is的值来确定渲染哪个组件 -->
37                 <component :is="componentId"></component>
38         </keep-alive>
39
40     </div>
41 <script src="./vue.js"></script>
42 <script>
43
44     Vue.component(‘componentOne‘,{
45         template:  `
46
47             <div>
48             <h3>组件1</h3>
49             <input type="text">
50             </div>
51
52         `
53     })
54     Vue.component(‘componentTwo‘,{
55         template:  `
56
57             <div>
58             <h3>组件2</h3>
59             <input type="text">
60             </div>
61
62         `
63     })
64     Vue.component(‘componentThree‘,{
65         template:  `
66
67             <div>
68             <h3>组件3</h3>
69             <input type="text">
70             </div>
71
72         `
73     })
74     new Vue({
75         el: ‘#app‘,
76         data() {
77             return {
78                 componentId: ‘componentOne‘
79             }
80         },
81         methods: {
82             chgComponent: function(componentId){
83
84                 this.componentId = componentId
85             }
86         },
87     })
88 </script>
89 </body>
90 </html>

原文地址:https://www.cnblogs.com/boye-1990/p/10588970.html

时间: 2024-10-29 04:23:50

VUE动态组件component以及<keep-alive>的相关文章

Vue动态组件

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

Vue动态组件&amp;异步组件

在动态组件上使用keep-alive 我们之前曾经在一个多标签的界面中使用is特性来切换不同的组件: <component v-bind:is="currentTabComponent"></component> 当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题. 如上是vue官网的例子,你会注意到如果你选择一篇文章,切换到Archive标签,然后切回Posts, 是不会继续展示你之前选择的文章的.因为你每次切换新标签的时

vue 开发系列(九) VUE 动态组件的应用

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

Vue.js 组件 component

什么是组件? 组件(component)是Vue.js最强大的功能之一,核心目标是扩展HTML元素,封装可重用的代码.我们可以把组件代码按照template.style.script的拆分方式,放置到对应的 .vue  文件中. Vue.js的组件可以理解为预先定义好行为的ViewModel类,一个组件可以预定义很多选项,但最核心的是以下几个: 模板(template) --  模板声明了数据和最终展现给用户的DOM之间的映射关系 初始数据(data) --  一个组件的初始数据状态.对于可复用

vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件

一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3>我是标题3</h3>' }); Vue.component('aaa',Aaa); *组件里面放数据: data必须是函数的形式,函数必须返回一个对象(json) 2. 局部组件 放到某个组件内部 var vm=new Vue({ el:'#box', data:{ bSign:true }, components:{ //局部组件 aaa:Aaa } }); 1

动态地绑定到它的 is 特性,可以实现动态组件

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

Vue动态加载异步组件

背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,iframe存在跨域的问题,当然是postMessage还是可以通信的,但也并非是最好的.目前有这么一个场景:门户需要制作通用的首页和数据概览页面,首页和数据概览页面通过小部件来自由拼接.业务组件在制作的时候只需要提供各个模块小部件的url就可以了,可是如果小部件之间还存在联系呢?那么iframe是不好

Vue两种组件类型介绍:递归组件和动态组件

一递归组件 递归组件的特性就是可以在自己的template模板中调用自己本身.值得注意的它必须设置name属性. // 递归组件 recursive.vue <template> <div> <p>递归组件</p> <Recursion :count="count + 1" v-if="count < 3"></Recursion> </div> </template&g

0810 vue 创建组件 模板 动态组件 传值

lesson10 1.demo    vue样本 <body> <div id="myApp"> </div> </body> <script> new Vue({ el:"#myApp", data:{}, methods:{}, computed:{}, filters:{} }) </script> 2.案例: 模拟百度搜索框 <!DOCTYPE html> <html