【问题标题】:Using v-model and still loading initial value if available使用 v-model 并且仍然加载初始值(如果可用)
【发布时间】:2021-02-25 21:18:17
【问题描述】:

我有一个子组件,我在其中传递customerData,如果可以作为道具使用。在该组件中,我将初始数据作为 customer 对象并在其上添加字段。但是,如果 customerData 可用并且对象中有该键,我想将其显示为默认值。我怎么能在仍然使用 v-model 的同时做到这一点?

 <child-component  :customer-data="customerData" > </child-component>

儿童

data: {
     customer: {}
},
props: {
    customerData: {type: Object}
}

<div>
    <input v-model="customer.name" />
    <input v-model="customer.age" />
    <input v-model="customer.address" />
</div>

【问题讨论】:

  • 由于在子组件中您将 props 定义为 customerData,然后在父组件中您需要传递相同的值,即 :customerData="customerData" 那么您从父组件传递的数据和键将在子组件中可用.

标签: vue.js vuejs2


【解决方案1】:

您可以通过prop中发送的值更新childcomponentcustomer数据:

const childcomponent = Vue.component('childcomponent', {
  template: '#childcomponent',
  data: () => ({ customer: {} }),
  props: { customer_data: {type: Object} },
  created() {
    this.customer = { ...this.customer, ...this.customer_data };
  }
});

new Vue({
  el:"#app",
  data: () => ({ customer_data: { name:'name', address:'address' } }),
  components: { childcomponent }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<template id="childcomponent">
  <div>
    <input v-model="customer.name" />
    <input v-model="customer.age" />
    <input v-model="customer.address" />
  </div>
</template>

<div id="app">
  <childcomponent :customer_data="customer_data" />
</div>

【讨论】:

  • 谢谢!使用mounted() 而不是created() 有什么缺点吗?另外,我可以做this.customer = .this.customer_data吗?
  • @HayleeGal58 不客气。最好在template 准备好之前准备好data。对于第二点,我不这么认为,但你也可以用其他方式来做,想法是覆盖customer中每个属性的默认值,如果它在prop customer_data中找到。跨度>
  • 如果您有其他问题,请告诉我,如果此答案解决了您的问题,请接受它作为关闭问题的解决方案。
  • 非常感谢...我认为created() 在收到道具之前运行了..我不知道组件在生命周期的那个时候可以访问它们
猜你喜欢
  • 2011-10-22
  • 2018-09-20
  • 2019-05-10
  • 2020-05-01
  • 1970-01-01
  • 2018-01-13
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多