【问题标题】:Watch is not firing when v-model changesv-model 更改时 Watch 未触发
【发布时间】:2017-01-06 14:57:05
【问题描述】:

我试图在我的 HTML 中更改日期时触发一个方法。当我更改日期时,它会更新屏幕上的模型 selectedDate ,但就像我的 watch 方法根本看不到更改一样。

<div class="col-md-8">
    <h3>Daily Summary - {{ selectedDate }}</h3>
</div>
<div class="col-md-4">
    <p>Change date</p>
    <input type="date" name="date" v-model="selectedDate">
</div>

我的手表代码:

data() {
    return{
        selectedDate: null
    }
},

watch: {
    selectedDate: function(){
        console.log('date changed');
    }
},

编辑:为了给这个问题提供更多背景信息,我正在使用导出的模板在模板中运行此代码,如下所示:

<template>  
    <div>

    <div class="col-md-8">
        <h3 v-on:click="testEvent(event)">Daily Summary - <span v-if="data.nxt_summary">{{ selectedDate }}</span></h3>
    </div>
    <div class="col-md-4">
        <p>Change date</p>
        <input type="date" name="date" v-model="selectedDate">
    </div>

    </div>
</template>

<script>
export default {

    data() {
        return{
            selectedDate: null
        }
    },

    watch: {
        selectedDate: function(){
            console.log('date changed');
        }
    },

}
</script>

【问题讨论】:

  • 我用你的代码创建了一个简单的小提琴,它似乎正在工作并且观察者代码正在被执行:jsfiddle.net/mimani/ppjtLmxh
  • @saurabh 我想这可能是因为我在模板中运行代码并导出它,我现在将更新我的问题

标签: javascript vue.js vuejs2


【解决方案1】:

在输入中有完整日期之前,type="date" 似乎不会触发 input 事件。如果您使用选择器,它会触发,但如果您单独更新每个部分,它不会触发,直到填写月份、日期和年份。https://jsfiddle.net/tg2s4kkq/1/

我要做的是将selectedDate 设置为默认值并标记必填字段,以便用户无法清空它。

https://jsfiddle.net/tg2s4kkq/3/

【讨论】:

  • 是的,我在 JS fiddle 中确实注意到了这一点,我认为它更多地与在模板中导出代码而不是其他任何东西有关,我已经更新了我的问题以提供完整的上下文
  • 我怀疑这会有所作为。这里是普通的 HTML/JS:jsfiddle.net/tg2s4kkq/2
  • 您可能只想设置开始日期而不是 null,这样您将始终在其中拥有某种类型的有效日期,以便输入触发。
  • 问题是我的 webpack 说它正在更新,但事实并非如此,在启动和停止 webpack 后它工作正常。真是浪费了几个小时。我会接受您对 vanilla JS 示例的回答以及您为帮助我所做的工作。
猜你喜欢
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2015-09-03
  • 2014-09-22
  • 2021-01-23
  • 2016-09-24
  • 2017-03-30
  • 2016-03-10
相关资源
最近更新 更多