VUE动态组件component以及keep-alive

component

<!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

Props:

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

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

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

 <!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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值