代码也没有逻辑错误,但是报错
[Vue warn]: $listeners is readonly. $attrs is readonly.
情况1:多处声明了new Vue,解决方案:删除一个,用全局变量引用同一个Vue
情况2:import Vue from 'Vue';第二个Vue首字母不要大写,vue即可
import Vue from 'vue';
情况3:在使用多层级组件的时候,出现了A组件调用B组件,B组件再调用了C组件。直接使用了A组件修改了C组件的数据,这个不合法的。
具体解决办法:
在B组件中嵌入C组件的时候这么写
<C v-bind="$attrs" v-on="$listeners"></C>
<!-- 通过v-on绑定$listeners事件,A组件能越过B组件直接监听获取C组件触发的事件 -->
<!-- 通过v-bind绑定$attrs属性,C组件能越过B组件直接获取到A组件中传递下来的props(除了B组件中props声明的) -->
这样,就实现了A→B→C跳跃式监听事件和传参。
当然也可以用Vuex解决这个问题。
情况4:组件库的package.json中dependencies包含了vue包,然后导致最后打包出来的组件库也包含vue包,然后和引用这个组件库的项目中的vue发生冲突。
举个例子,project1是vue组件库,package.json中dependencies包含了"vue":“2.6.1”
project1打包出了"project1":“0.0.1” 这个组件包
然后project2是项目代码,package.json中dependencies包含了"vue":“2.6.1"和"project1”:“0.0.1”
这样,在使用project1的组件时就会出现readonly错误