学习Vue子组件操作父组件(emit)

本文介绍了一个使用Vue.js实现的动态组件案例,通过v-for指令遍历显示列表项,并为每个组件传递动态数据和唯一key。组件内部实现了数据的复制、增减操作,并将这些操作作为事件向上抛出,由父组件处理。这展示了Vue.js中组件间的数据流和事件传递机制。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>vue learning</title>
</head>
<body>
    <div id="app">
        <input v-model="count"/>
        <ol>
            <!--
              现在我们为每个 todo-item 提供 todo 对象
              todo 对象是变量,即其内容可以是动态的。
              我们也需要为每个组件提供一个“key”,稍后再
              作详细解释。
            -->
            <todo-item
              v-for="item in groceryList"
              v-bind:todo="item"
              v-bind:key="item.id"
              @do-copy="doCopy"
              @do-add="doAdd"
              @do-sub="doSub"
              ></todo-item>
          </ol>
    </div>
<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!--<script src="https://cdn.jsdelivr.net/npm/vue"></script>-->
<script>
    Vue.component('todo-item', {
        props: ['todo'],
        template: '<li>{{ todo.text }} <button @click="copy(todo.text)">复制</button><button @click="add()">+</button><button @click="sub()">-</button></li>',
        methods:{
            copy: function(text){
                console.log('do-copy',text);
                this.$emit('do-copy', text)
            },
            add: function() {
                console.log('do-add');
                this.$emit('do-add');
            },
            sub: function() {
                console.log('do-sub');
                this.$emit('do-sub');
            },
        },
    })

    var app = new Vue({
        el: '#app',
        data: {
            count: 0,
            groceryList: [
            { id: 0, text: '蔬菜' },
            { id: 1, text: '奶酪' },
            { id: 2, text: '随便其它什么人吃的东西' }
            ]
        },
        methods:{
            doCopy(text) {
                console.log('groceryList', text)
                this.groceryList.push({
                    id: this.groceryList.length,
                    text: text,
                })
            },
            doAdd() {
                console.log('doAdd', this.count);
                this.count++;
            },
            doSub() {
                console.log('doSub', this.count);
                if (this.count > 0) {
                    this.count--;
                }
            },
        }
    })
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值