【问题标题】:Multiple same sub components referencing only to last child's value VueJS多个相同的子组件仅引用最后一个孩子的值 VueJS
【发布时间】:2018-08-04 08:57:56
【问题描述】:

<script>
  import {} from 'jquery-datetimepicker/build/jquery.datetimepicker.full.min'
  export default {
    name: 'date-time-picker',
    props: {
      reset: {
        type: Boolean,
        default: false
      },
      passedDate: {
        type: String,
        default: null
      },
      number: {
        type: Number,
        default: 0
      }
    },
    components: {},
    data () {
      return {
        date: this.formatTime()
      }
    },
    computed: {
    },
    methods: {
      emitInputDone () {
        console.log('this is datetime number ' + this.number)
        this.$emit('input', this.date)
      },
      formatTime (ct = null) {
        let newDate = ct ? new Date(ct) : new Date()
        var dd = newDate.getDate()
        var mm = newDate.getMonth() + 1

        var yyyy = newDate.getFullYear()
        if (dd < 10) {
          dd = '0' + dd
        }
        if (mm < 10) {
          mm = '0' + mm
        }
        let ddd = yyyy + '-' + mm + '-' + dd
        return ddd
      }
    },
    watch: {
      reset: function (reset) {
        if (reset) {
          this.date = this.formatTime()
          this.$forceUpdate()
          this.emitInputDone()
          this.$emit('reseted', true)
        }
      },
      passedDate (value) {
        if (value) {
          this.date = this.formatTime(value)
          this.$forceUpdate()
          this.emitInputDone()
        }
      },
      number (value) {

      }
    },
    mounted () {
      let $this = this
      $('.datetime').datetimepicker({
        timepicker: false,
        format: 'Y-m-d',
        onSelectDate: function (ct) {
          let newDate = $this.formatTime(ct)
          $this.date = newDate
          // $this.emitInputDone()
        }
      })
      this.emitInputDone()
    }
  }
</script>
<template>
  <div>
    <b-form-input v-model="date" @input="emitInputDone" @change="emitInputDone" type="text" class="datetime" placeholder="Y/m/d"></b-form-input>
  </div>
</template>

我正在尝试在 VueJS 中制作 StartDate - EndDate 图表,但我的日期时间选择器仅引用最后一个孩子(数字 2)。

<div class="row">
    <div class="col-3">Start Date</div>
    <div class="col-9">
        <div :is="'date-time-picker'" v-model="startDate" :passed-date="startDate" :number="1">
         </div>
    </div>
</div>
<div class="row">
    <div class="col-3">End Date</div>
    <div class="col-9">
        <div :is="'date-time-picker'" v-model="endDate" :passed-date="endDate" :number="2">
        </div>
    </div>
</div>

这是父母处理孩子的原因,还是孩子身上的某些东西使他们引用了相同的输入?

注意:日期时间选择器包含一个 bootstrap-vue b-form-input。

我该如何解决这个问题?

【问题讨论】:

  • 我还在 date-time-picker 中创建了一个 console.log 来打印,当输入改变时,哪个组件被调用。在进行任何更改之前:in component 1 in component 2 但是在我更改第一个日期时间选择器中的输入后,它会打印:in component 2 in component 2
  • 尝试将key="1"添加到第一个,将key="2"添加到第二个。
  • @RoyJ 仍然不起作用
  • 你能显示你的日期时间选择器代码吗?
  • @RoyJ 我添加了代码

标签: vue.js


【解决方案1】:

这一行:

$('.datetime').datetimepicker

正在查找具有类 datetime 的第一项并激活它。您应该搜索相对于this.$el

【讨论】:

  • 非常感谢。我完全忘记了那条线。我认为它可能与VueJS有关,但现在它可以正常工作了
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 2013-03-12
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多