【动态组件】vue 动态创建不同的组件 利用循环遍历 component is 解决问题

9 篇文章 0 订阅

现在有个需求,点击按钮生成不同的组件,同时要在每个组件中记录一下当前组件的索引值。

突然想到了可以把新增的组件push到一个数组中维护,然后拿到数组中的索引值放进新增的组件中。同时利用 component 解决东投资组件的问题。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>component</title>
</head>
<body>
    <div id="app">
        {{name}}
        <!-- 点击增加组件leg1 -->
        <button @click="handleClick1">click and push component1</button>

        <!-- 点击增加组件leg1 -->
        <button @click="handleClick2">click and push component2</button>

        <!-- 在这里循环遍历存储组件的数组,动态渲染 -->
        <template v-for="(item, key) in cmps">
            <component
            :index="key" 
            :key="key"
            :is="item">
            </component>
        </template>
        
    </div>

    <!-- 这是组件1 --组件名称为 leg1 -->
    <template id="l1">
        <div>
            {{legname}} - {{index}}
        </div>
    </template>

    <!-- 这是组件2 --组件名称为 leg2 -->
    <template id="l2">
        <div>
            {{legname}} - {{index}}
        </div>
    </template>

   
    <!-- 引入 vue cdn -->
    <script crossorigin="anonymous" integrity="sha512-h3aCJRk6tEHugDYUidF7GqixhzgeXSiSdq5U+5oLIJtIncSQq6eev48qqYfuTdrsH5Q1eO4IAmyJGDwzRaWNNQ==" src="https://lib.baomitu.com/vue/2.6.12/vue.common.dev.js"></script>
    <script>
        // 声明组件1
        var leg1 = {
            template: '#l1',
            data () {
                return {
                    legname: 'leg001'
                }
            },
            props: {
                index: {
                    type: Number
                }
            }
        }
        
        // 声明组件2
        var leg2 = {
            template: '#l2',
            data () {
                return {
                    legname: 'leg002'
                }
            },
            props: {
                index: {
                    type: Number
                }
            }
        }

        // 初始化vue
        new Vue({
            el: '#app',
            data: {
                name: 'hehe',
                cmps: []
            },
            components: {
                leg1,
                leg2
            },
            methods: {
                // 添加组件1
                handleClick1 () {
                    this.cmps.push("leg1");
                    console.log('now this cmps length: ', this.cmps.length)
                },
                // 添加组件2
                handleClick2 () {
                    this.cmps.push("leg2");
                    console.log('now this cmps length: ', this.cmps.length)

                },
            },
        })
    </script>
</body>
</html>

实现最终的效果:

最终大功告成。虽然整体不难,但是反映到业务需求上,一时间突然没想到,记录一下。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值