假设我有以下组件:
<c-attachs v-for="item in attachs" v-bind:path="item.path"></c-attachs>
尝试直接从某些方法编辑某些属性,例如:
methods: {
changeProp: function ()
{
this.path = 'myNewString';
}
}
Vuejs在控制台上发出警告:
避免直接改变道具,因为只要父组件重新渲染
,该值就会被覆盖
但是......如果我设置&#34; v-bind:allprops =&#34; item&#34;并通过&#34; allprops&#34;直接编辑属性对象(如下面的代码),它没有错误地工作正常。我的疑问是......这是在不使用v-model的情况下编辑事件属性的正确方法吗?
this.allprops.path = 'myNewString';
答案 0 :(得分:0)
没有正确的编辑道具的方法,因为你不应该编辑它们。
每个组件都应该完全控制自己的data
。这使得行为易于推理。作为props
传递给子项的项应该被视为只读项,以便这些项的所有者保留控制权。这就是为什么Vue有events。
如果某个组件中的某些内容会影响该组件不拥有的数据,则该组件应issue an event,以便数据项的所有者可以处理它。如果数据项的所有者更改其值,则该更改将通过道具向下流动。