javascript - Vuejs 中的属性突变

标签 javascript html vue.js vuejs2 vue-component

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

<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>)

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

最佳答案

您根本不需要使用 watch 。不要使用 v-model,试试这个:

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

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

关于javascript - Vuejs 中的属性突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152926/

相关文章:

javascript - Blob 图像返回空白图像

css - Vue - 更改作用域 &lt;style&gt; 中的内容?

javascript - 如何在 Nuxt.js 中创建自定义加载指示器?

javascript - 如何在悬停时制作圆 Angular ?

php - 如何...将 "plus"b 转换为 "+"b

javascript - 下拉从列表中删除空白项

vue.js - 带有 imagemin webpack 插件的 Vue cli 3

html - 无法使用 Bootstrap 在页面上放置表格列

javascript - 拖放多个图像,在客户端调整它们的大小并获取调整大小的图像

javascript - JQuery/CSS 气泡鼠标悬停