You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中BootstrapVue DatePicker组件与Vue表单的值同步问题咨询

How to Sync DatePicker Component Value with Parent Form in VueJS

Hey there! I totally get where you're coming from—when you're new to Vue, sharing state between parent and child components can feel tricky at first. The good news is Vue has built-in ways to handle this, so let's walk through the two most straightforward solutions to get your DatePicker's value synced with your form components.

Vue's v-model is just syntactic sugar for binding a value prop and listening to an input event. By adapting your DatePicker component to support this, you can use it just like any native form input in your parent components.

Step 1: Update the DatePicker Component

Modify your component to accept a value prop instead of using internal data, and emit an input event whenever the date changes:

<template>
  <div>
    <label for="example-datepicker">Choose a date</label>
    <b-form-datepicker 
      id="example-datepicker" 
      :value="value" 
      @input="$emit('input', $event)"
      class="mb-2"
    ></b-form-datepicker>
    <p>Value: '{{ value }}'</p>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: [String, Date], // BootstrapVue returns Date by default, adjust based on your needs
      default: ''
    }
  }
}
</script>

Step 2: Use the Component in Your Parent Form

Now you can bind the DatePicker directly to a data property in your form component using v-model:

<template>
  <form @submit.prevent="submitForm">
    <!-- Import and use your DatePicker -->
    <date-picker v-model="formData.selectedDate"></date-picker>
    
    <button type="submit">Submit Form</button>
  </form>
</template>

<script>
import DatePicker from './DatePicker.vue'

export default {
  components: { DatePicker },
  data() {
    return {
      formData: {
        selectedDate: '' // This will sync automatically with the DatePicker
      }
    }
  },
  methods: {
    submitForm() {
      // Now you can access the date directly from this.formData.selectedDate
      console.log('Submitting date:', this.formData.selectedDate)
      // Send this data to your Laravel backend via an API call or form submit
    }
  }
}
</script>

Solution 2: Manual Prop + Event Binding

If you prefer more explicit control (or need a custom event name), you can manually pass the value as a prop and listen for a custom event to update the parent's state.

Step 1: Update the DatePicker Component

Rename the prop to something more descriptive (like selectedDate) and emit a custom event (e.g., date-updated) when the value changes:

<template>
  <div>
    <label for="example-datepicker">Choose a date</label>
    <b-form-datepicker 
      id="example-datepicker" 
      :value="selectedDate" 
      @input="$emit('date-updated', $event)"
      class="mb-2"
    ></b-form-datepicker>
    <p>Value: '{{ selectedDate }}'</p>
  </div>
</template>

<script>
export default {
  props: {
    selectedDate: {
      type: [String, Date],
      default: ''
    }
  }
}
</script>

Step 2: Use the Component in Your Parent Form

Bind the prop and listen for the custom event to update your parent's data:

<template>
  <form @submit.prevent="submitForm">
    <date-picker 
      :selected-date="formData.selectedDate"
      @date-updated="formData.selectedDate = $event"
    ></date-picker>
    
    <button type="submit">Submit Form</button>
  </form>
</template>

<script>
import DatePicker from './DatePicker.vue'

export default {
  components: { DatePicker },
  data() {
    return {
      formData: {
        selectedDate: ''
      }
    }
  },
  methods: {
    submitForm() {
      console.log('Submitting date:', this.formData.selectedDate)
      // Handle form submission to Laravel here
    }
  }
}
</script>

Quick Note on Date Formatting

BootstrapVue's b-form-datepicker returns a Date object by default. If you need a string format (like ISO or YYYY-MM-DD), you can format the emitted value in the DatePicker component. For example:

@input="$emit('input', $event.toISOString())"
// Or use a date library like date-fns for custom formatting

内容的提问来源于stack exchange,提问作者Hanyi Koh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:27:30