vue中通过v-bind也可以传递函数,但是我看大部分使用都是v-on去传递事件,然后子组件通过emit触发父组件的函数。
为什么v-bind传递函数这么少见呢?v-bind传递函数都能被v-on + emit 替代吗?或者它们有什么优劣势?
主要是面向的场景不一样。
使用 v-bind
传递的函数的方式,适合在子组件内部处理的一些业务逻辑。
比如说 EleUI 的 el-upload 组件。我们在期望自己实现上传函数的时候,就会使用 http-request
属性传递一个上传函数给子组件,子组件内部去调用我们提供的上传函数。如果没有那么它会使用自己内部的默认实现使用传递下来的 action
属性来发起上传。
而 v-on
+ $emit
的实现,更多的场景是业务是在上级组件的,比如说刚刚提到的 el-upload
组件图片上传完成之后,我们会希望同步修改绑定的 fileList
变量。它会抛出一个 on-change
/on-sucess
这样的事件让我们去处理数据(而不是直接修改绑定的 fileList
变量)。像类似这样业务的我们就会在父级组件来实现,而不是在子组件内实现。
因为规范吧,就像我们声明对象都是let a = {}
,不会let a = function(){}
,即使function同样可以绑定属性。v-on是事件,v-bind传递的是属性,v-on不会强制父组件有这个事件,有就触发,没有拉倒,v-bind需要在props中声明,可能还会有require和type的限制,需要在父子组件中都约定好,如果都是你自己开发,那你明白这个约束,如果是多人协作,别人可能会讲:这写的什么。所以回到前面,还是规范吧
在Vue中,v-bind
和v-on
/$emit
用于不同的目的,因此它们的使用场景也有所不同。
v-bind
v-bind
主要用于属性绑定,包括数据、计算属性、方法或函数等。你可以使用v-bind
将一个函数从父组件传递到子组件,然后在子组件内部调用这个函数。
例如:
<template> <child-component :my-function="parentFunction"></child-component></template><script>export default { methods: { parentFunction() { console.log('Function from parent component'); } }}</script>
在这个例子中,parentFunction
方法被绑定到子组件的myFunction
属性上。然后,子组件可以在其内部通过this.myFunction()
来调用这个方法。
v-on/$emit
另一方面,v-on
主要用于监听DOM事件,如点击、输入等,并在触发这些事件时执行一些操作。在组件通信中,v-on
通常与$emit
一起使用,以允许子组件向父组件发送事件。
例如:
<template> <child-component @child-event="parentFunction"></child-component></template><script>export default { methods: { parentFunction() { console.log('Function from parent component called by child event'); } }}</script>
在这个例子中,子组件通过$emit('child-event')
触发一个事件,父组件通过v-on
监听这个事件,并在事件触发时执行parentFunction
方法。
选择何时使用
选择使用v-bind
传递函数还是v-on
/$emit
进行通信,主要取决于你的具体需求:
v-bind
传递函数可能是一个好选择。v-on
/$emit
进行通信可能更合适。优劣势
v-bind
传递函数的优势在于它允许子组件更灵活地调用父组件的函数。然而,这也可能导致子组件对父组件的依赖过强,降低了组件的独立性。v-on
/$emit
进行通信的优势在于它允许组件之间进行解耦的通信,父组件和子组件都可以独立地触发和响应事件。然而,这也可能导致事件的数量增加,使组件间的通信变得更加复杂。总之,在选择使用v-bind
传递函数还是v-on
/$emit
进行通信时,你需要根据你的具体需求和项目的复杂性来做出决策。
vue 中的 scopedSlots 可以用v-bind 在组件上传递吗?
本文向大家介绍如何区分vue中的v-show 与 v-if,包括了如何区分vue中的v-show 与 v-if的使用技巧和注意事项,需要的朋友参考一下 1. v-show 不管初始的条件是什么,元素总是会被渲染,并且只是简单的基于 CSS display: none 或者 display: block 的属性进行切换。 2. v-if 会根据初始的条件(data里自己的定义的数据)来进行真正的渲染
缩写:: 预期:any (with argument) | Object (without argument) 参数:attrOrProp (optional) 修饰符: .prop - 被用于绑定 DOM 属性 (property)。(差别在哪里?) .camel - (2.1.0+) 将 kebab-case 特性名转换为 camelCase. (从 2.1.0 开始支持) .sync (2.
https://play.vuejs.org/#eNp9UctuwyAQ/BXKqZXyUJSb5UR9KIf20FZt1... 问题来源:https://stackoverflow.com/questions/41944054/reference-element-property-within-another-property 想要解决这个问题,又不想用v-for封装大改
vue 组件批量绑定属性 v-bind="$attrs" 、 v-bind="$props" 能同时使用吗? 尝试两个都绑定 不可行
本文向大家介绍聊聊vue 中的v-on参数问题,包括了聊聊vue 中的v-on参数问题的使用技巧和注意事项,需要的朋友参考一下 vue中v-on:clock的使用 最近在学习vue.js框架。记下其中遇到的一些问题,以便以后查阅。 首先,这是一个页面(为了便于观察,将各个标签都一一着色): 其中html代码: js部分的代码: 这时候如果点击cell中有颜色的区域(即点击li标签的字标签的时候),