vue.js - 如何正确地将数据从子组件传递到父组件以及将数据从父组件传递到子组件?

标签 vue.js vuejs2 vue-component

首先,这是我目前的结构

子组件

// HTML
<v-select
 v-bind:items="selectItems"
 v-model="selectedItem"
 label="Category"
 item-value="text"
></v-select>
<v-text-field
 label="Enter Value"
 type="number"
 v-model="compVal"
></v-text-field>

// JS
props: {
 selectItems: {
  type: Array,
  required: true
 },
 selectedItem: {
  type: String
 },
 compVal: {
  type: Number
 },
}

父组件

// HTML

<component :selecItems="selectOneItems" :selectedItem="selectOneItem" 
:compVal="compOneVal"></component>

<component :selecItems="selectTwoItems" :selectedItem="selectTwoItem" 
:compVal="compTwoVal"></component>

// JS
data () {
 return {
  selectOneItems: [someArray],
  selectedOneItem: null,
  compOneVal: 0,
  selectTwoItems: [someArray],
  selectedTwoItem: null,
  compTwoVal: 0
 }
}

我的场景

1) 在初始状态下,我必须从 Child 的文本输入中获取值并将其存储在本地。 ( child 对 parent ) 2) 浏览器刷新后,我将检查任何本地数据,如果存在,我必须填充子值(父到子)

当前结构的错误

每当我输入或选择它触发此错误的东西

避免直接修改 prop,因为只要父组件重新渲染,该值就会被覆盖。相反,使用基于 prop 值的数据或计算属性。正在发生变化的 Prop :“compOneValue”

那么如何避免这个错误呢?如何正确实现这个结构,以便我可以在任何需要的地方重用这个组件。

最佳答案

您正在使用 propsv-model。当父组件重新渲染时, Prop 将被覆盖。

datav-model 结合使用,并根据 props 设置初始值:

子组件

// HTML
<v-select
  v-bind:items="selectItems"
  v-model="selectedItemModel"
  label="Category"
  item-value="text"
></v-select>
<v-text-field
  label="Enter Value"
  type="number"
  v-model="compValModel"
></v-text-field>

// JS
props: {
  selectItems: {
    type: Array,
    required: true
  },
  selectedItem: {
    type: String
  },
  compVal: {
    type: Number
  },
},

data: function() {
  return {
    selectedItemModel: this.selectedItem,
    compValModel: this.compVal
  }
}

可能值得将您的 Prop 更改为称为 initialSelectedIteminitialCompVal,然后将数据属性称为 selectedItem补偿值

关于vue.js - 如何正确地将数据从子组件传递到父组件以及将数据从父组件传递到子组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46440979/

相关文章:

javascript - Vuex 未捕获的语法错误和标识符

javascript - Vuejs 类型错误 : Cannot read property 'placeholder' of undefined"

vue.js - 如何在 Vue.js 中的组件之间传输数据?

javascript - 如何验证 vue 中的第一个数字不为零?

javascript - vue.js中获取数据属性的方法

vue.js - VueJs 选项卡组件的延迟初始化仅一次

vue.js - vue.config.js [transpileDependencies] 不起作用

vue.js - 具有 v-once 效果的功能组件

webpack - 在 Vue.js 中加载外部 Javascript 文件

javascript - vue 组件中无法包含 Highcharts