首先vue的单项数据流特性导致子组件只能接收父组件传递的数据,也就是只能读不能改,所以若要修改父组件的数据便只能由父组件自己去改。
根据这个特性我们实现父子传值的思路就是:父组件向子组件传递一个值,然后子组件修改后,告诉父组件我把值改了。
具体的实现步骤就是:(1)先通过自定义属性进行父传子;(2)再通过emit进行子传父;(3)然后在父组件中通过自定义事件去接收,然后修改。
通过v-model
传值,可以省略第三步,也就是不用父组件写修改方法,只需要在子组件中使用 emit
即可,由 v-model
实现修改操作。这里的 emit
的写法有不同,具体写法参考下面的示例代码。
父组件:子组件标签自定义属性绑定 v-model:自定义属性 = "值"
;
子组件:emit("update:自定义属性",修改的值)
;
v-model既能父传子,又能子传父
:::
对于原生事件,
$event
就是事件对象,能.target
对于自定义事件,
$event
就是触发事件时所传递的数据,不能.target