Vuejs 中的属性突变

Posted

技术标签:

【中文标题】Vuejs 中的属性突变【英文标题】:Property mutation in Vuejs 【发布时间】:2017-06-28 10:05:30 【问题描述】:

所以我有多个这样的代码:

<input id="data" type="text"  v-model="data">
<label for="data">Data</label>

并且我试图用它来制作一个属性,这样我就不会每次都重复它:

Vue.component('textbox', 
  template: `
   <div>
   <input :id="id" type="text" v-model="value">
   <label :for="id"> label </label>
   </div>
  `,
  props: [
      "id", "value", "label", "for"],
  watch: 
    value: function(newVal)
       this.$emit('input', newVal)
    
  
)

并像这样在我的 html 中访问它:

<textbox v-model="data" id="someID" label="Data"></textbox>

一切正常,但每次我在文本框中输入时,我都会在控制台中收到以下警告:

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "value" 
(found in component <textbox>)

有没有办法删除该警告消息?还是我做错了?任何帮助将不胜感激。

【问题讨论】:

错误本身说 相反,使用基于道具值的数据或计算属性,所以代替道具尝试数据或计算道具 @VinodLouis 你介意给我举个例子吗?老实说,我不明白 【参考方案1】:

您根本不需要使用手表。而不是使用 v-model,试试这个:

<input :id="id" type="text" :value="value" @input="$emit('input', $event.target.value)">

工作示例:http://codepen.io/CodinCat/pen/dNQopR?editors=1010

【讨论】:

做到了!谢谢。

以上是关于Vuejs 中的属性突变的主要内容,如果未能解决你的问题,请参考以下文章

Vuex 和 VueJS(不要在突变处理程序之外改变 vuex 存储状态)

如何乐观响应中继现代突变中的连接属性?

未使用 Vuex 中的计算属性注册突变

突变中的 GraphQL 嵌套节点 - 对象文字只能指定已知属性,并且类型中不存在“天”

vuejs(待办事项列表应用程序)中(任务)道具的意外突变

Knockout JS - 在没有 ko.mapping 的情况下观察数组的任何属性中的突变