网上有很多解决方案:1.用.sync运算符。2.子组件使用中间变量接收......。但是都用到了props进行传值,用法很繁琐。今天遇到一个问题使用了以上方案都无法解决一直有警告信息。
简单方法解决:$attrs和$listeners
$attrs:
项目中有多层组件传参可以使用$attrs,可以使代码更加美观,更加简洁,维护代码的时候更方便。如果使用普通的父子组件传参prop和$emit,$on会很繁琐;如果使用vuex会大材小用,只是在这几个组件中使用,没必要使用vuex;使用事件总线eventBus,使用不恰当的话,有可能会出现事件多次执行。
简单来说:$attrs继承所有的父组件属性(除了 prop 传递的属性、class 和 style ),一般用在子组件的子元素上。
$listeners:
$ listeners属性:它是一个对象,里面包含了作用在这个组件上的所有监听器,你就可以配合 v-on="$listeners" 将所有的事件监听器指向这个组件的某个特定的子元素。(相当于子组件继承父组件的事件)
代码示例:
父组件中嵌套子组件
子组件中:用v-bind继承父组件中的属性,v-on进行监听。
解决子组件修改父组件中值所带来的警告信息