Vue自定义事件内容分发

Vue自定义事件内容分发

这个案例也是狂神老师的。
现在说一下这个this. e m i t ( ′ 方 法 ′ , ′ 参 数 ′ ) , 这 个 触 发 自 定 义 事 件 , 而 自 定 义 事 件 需 要 在 组 件 的 头 上 面 写 v − o n : 命 名 ( ′ 想 要 调 用 的 方 法 ′ ) 。 看 上 去 非 常 复 杂 , 其 实 不 然 , 多 练 习 几 次 会 发 现 , 只 需 要 注 意 p r o p s 的 参 数 , 方 法 参 数 的 添 加 , 写 好 方 法 名 就 可 以 了 。 其 实 它 只 不 过 就 是 组 件 调 用 v u e 里 面 的 方 法 删 除 数 据 罢 了 , 通 过 视 图 的 一 个 小 操 作 , 相 当 于 是 给 V u e . c o m p o n e n t 和 V u e 对 象 做 一 个 连 接 , 也 就 是 这 个 v − o n 就 是 一 个 连 接 , 而 emit('方法','参数'),这个触发自定义事件,而自定义事件需要在组件的头上面写v-on:命名('想要调用的方法')。 看上去非常复杂,其实不然,多练习几次会发现,只需要注意props的参数,方法参数的添加,写好方法名就可以了。其实它只不过就是组件调用vue里面的方法删除数据罢了,通过视图的一个小操作,相当于是给Vue.component和Vue对象做一个连接,也就是这个v-on就是一个连接,而 emit(),von:propsvueVue.componentVuevonemit只是触发连接,调用方法而已。

需要注意问题:

  • 如果有参数,别忘了在方法和props里面加上参数
  • v-bind的意思其实就是绑定参数,告诉你这个是参数而已
  • 请注意methods这些标签的书写
  • 别忘记写数据在data上
  • 自定义的标签别写错

下面是狂神老师总结的简图:
在这里插入图片描述
这样一来就清晰很多了。这里也发现了vue的操作很繁琐。需要多写。

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <tobo>
        <tobo-title slot="title" :title="title"></tobo-title>
<!--        v-bind用于绑定参数,传入方法里面-->
        <tobo-items slot="items" v-for="(item,index) in items" v-bind:item="item"
                    v-bind:index="index" v-on:remove="removeItems(index)"></tobo-items>
    </tobo>

</div>

<script>
    Vue.component("tobo",{
        template:'<div>\
           <slot name="title"></slot>\
           <ul>\
             <slot name="items"></slot>\
           </ul>\
        </div>'
    })

    Vue.component("tobo-title",{
        props:['title'],
        template:"<div>{{title}}</div>"
    });

    Vue.component("tobo-items",{
        props:['item','index'],
        template:"<li>{{index}}----{{item}}<button @click='remove'>删除</button></li>",
        methods:{
            remove:function(index){
                this.$emit('remove',index);
            }
        }
    });

    var vue=new Vue({
        el:"#app",
        data:{
            title:"好人",
            items:['sss','aaa','bbb']
        },
        methods:{
            removeItems:function(index){
                //删除items里面的数据
                console.log("删除"+index);
                this.items.splice(index,1);
            }
        }
    });

</script>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值