ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

vue3-v-on

vue3-v-on 这个问题问到点子上了和:长得像但作用完全相反搞混它们会出大问题。直接给你一句终极心法背下来就通了:冒号 / v-bind是“传进去”父亲给孩子东西。艾特 / v-on是“听出来”父亲竖着耳朵听孩子喊话。下面把这行代码Child ask-for-moneyhandleGetMoney /彻底拆解给你看。1.到底是什么是 Vue 提供的简写全称是v-on指令。它的唯一作用就是在 DOM 元素或组件上“监听”事件。当你在模板里写下ask-for-money你其实是在告诉 Vue“嘿请帮我盯着这个Child组件。如果它触发emit了一个名叫ask-for-money的事件就立刻执行后面的handleGetMoney函数。”2. 这行代码的执行流程照相机慢放为了让你看透本质我们把代码运行时拆成 3 步绑定监听此刻Vue 解析模板看到ask-for-money就在子组件实例上注册了一个事件监听器。等待触发未来某个时刻用户在页面上点了子组件里的按钮子组件内部执行了emit(ask-for-money, 100)。回调执行触发瞬间Vue 收到子组件抛出的信号立刻调用父组件里的handleGetMoney函数并且把子组件传来的100作为参数传进去。3. 极简记忆法对比:和重点把这个表格刻在脑子里你就再也不会混淆了指令符号全称方向中文含义等号右边写什么v-bind:绑定父 → 子(向下)给把数据给子组件用JS 变量/表达式v-on监听子 → 父(向上)当当子组件发生某事时JS 函数名具体到这行代码如果你写成:ask-for-moneyhandleGetMoney意思是把handleGetMoney变量的值当 props 传给子组件子组件根本收不到事件会报错。你写成ask-for-moneyhandleGetMoney意思是当ask-for-money事件触发时调用这个函数。4. 特别容易踩的坑必看坑一什么时候加()括号✅正确clickhandleClick不写括号默认会把原生事件对象$event传进去✅正确ask-for-moneyhandleGetMoney不写括号子组件传来的参数会自动按顺序传给函数⚠️特殊情况如果函数需要传额外的固定参数才加括号。比如clickhandleDelete(item.id, $event)坑二原生事件 vs 自定义事件这行代码是“自定义事件”因为ask-for-money不是浏览器自带的 click/input。Vue 对的处理一视同仁用在普通 HTML 标签上如button click...监听浏览器原生 DOM 事件。用在自定义组件标签上如Child ask-for-money...监听子组件用defineEmits定义的自定义事件。5. 给 TS 用户的类型提示进阶在你的代码里handleGetMoney定义在哪里父组件中// 父组件 script 里 const handleGetMoney (amount: number) { // 这里的 amount 类型 console.log(收到 ${amount} 元); };Vue 的 TS 类型推导无法自动从模板传到 TS 函数但你必须手动给amount标注类型number这样才能保证类型安全。如果子组件传了个字符串100这里就会飘红提示你类型不对。6. 实战小测试看你懂了没下面这段代码哪一行能正确监听到子组件的submit事件template !-- A -- Child :submithandleSubmit / !-- B -- Child submithandleSubmit / !-- C -- Child v-on:submithandleSubmit / /template答案B 和 C 都是对的C 是的全称写法等同。A 是错的因为:是传 props不是监听事件。现在你再回头看我上一轮教的第二层子传父这一行ask-for-money就是整个通信的“电话线”——子组件负责拨号emit父组件负责接听。没有子组件喊破喉咙父组件也听不见如果你理解了去把上一轮作业里的 TodoList 删除功能写上delete...你绝对会有“原来如此”的顿悟感。有什么卡住的随时问我
返回列表