繁体   English   中英

在 vue 中使用带有 v-model 的方法

[英]Using a method with v-model in vue

我有一个关于使用方法而不是计算的 vue 的v-model的问题。 我知道根据我在这里看到的内容,我们不能完全做到这一点: How to bind a v-model with a method in Vue.js 但我知道它有一个解决方法。 我正在使用 bootstrap vue 的 datepicker,但我认为这个概念不受此限制。

我有两个日期选择器:

<b-form-datepicker id="end-datepicker" v-model="formatISO8601Start" class="mb-2 border-0" hide-header></b-form-datepicker>
<b-form-datepicker id="end-datepicker" v-model="formatISO8601End" class="mb-2 border-0" hide-header></b-form-datepicker>

如果我只有一个日期选择器,那么我将只计算一个,如下所示:

formatISO8601: {
      get: function() {
          return .....
      },
      set: function(dateSegment) {
          ....
          ....
      }
    },

问题是我不相信我可以为两个日期选择器的 v 模型使用相同的计算值,因为它们会引用相同的东西。 我当然可以为每个日期选择器创建两个计算值,但我认为这是不好的做法,因为我正在复制代码。

所以我想也许我可以使用两种方法,而不是使用

v-model="formatISO8601"

,我可以将其替换为:

:value="getISO8601Time('start')" @input="setISO8601Time(????)"

这样我就可以使用传递的参数来控制逻辑:

<b-form-datepicker id="end-datepicker" :value="getISO8601Time('start')" @input="setISO8601Time(????)" class="mb-2 border-0" hide-header></b-form-datepicker>
<b-form-datepicker id="end-datepicker" :value="getISO8601Time('end')" @input="setISO8601Time(????)" class="mb-2 border-0" hide-header></b-form-datepicker>

getISO8601Time(time) {
  return ......
}

setISO8601Time(????) {
  ....
  ....
}

这就是我感到困惑的地方。 注意我把???? . 在计算中, set中的参数,即dateSegment自动填充所选日期,但是在方法中不会发生这种情况。 在这种情况下如何获得选择的日期?

也许您可以尝试使用数据功能:

 new Vue({ el: "#demo", data() { return { start: null, end: null } }, methods: { setISO8601Time(e, time) { e = new Date(e) this[time] = e.toISOString() } } })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" /> <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" /> <script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script> <script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue-icons.min.js"></script> <div id="demo"> <b-form-datepicker id="end-datepicker" :value="start" @input="setISO8601Time($event, 'start')" class="mb-2 border-0" hide-header> </b-form-datepicker> {{ start }} <b-form-datepicker id="end-datepicker" :value="end" @input="setISO8601Time($event, 'end')" class="mb-2 border-0" hide-header> </b-form-datepicker> {{ end }} </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM