Vue.js - 观察输入值是否改变
Vue.js - Watch the input value has been changed or not
我是Vue.js的新人。目前,我正在创建一个验证对话框来查看用户的 otp 是否有效。如果该值在 5 秒内未更改,我的应用程序将自动断开连接。但是,如果我使用watch
来监控这个值,它并没有起作用,因为这个值没有改变,watch
不会触发。
如何监控5秒内没有变化的值?
对话框
<template>
<div>
<input type="text" v-model="otp">
<b-button size="md" @click="cancel()" class="jump-to-ada-btn-cancel">
Cancel
</b-button>
<b-button size="md" @click="handleJumpPage()" class="jump-to-ada-btn">
Send
</b-button>
</div>
</template>
<script>
export default {
data () {
return {
otp: ""
}
},
computed: {
show: {
get: function () {
return this.$store.state.modals.showOTPModal
},
set: function (val) {
this.$store.commit("OPEN_OTP", {fieldName: "showOTPModal", fieldValue: val})
}
}
},
methods: {
checkValueChange(newValue) {
if(newValue === "") {
alert("value is not changed yet")
}
}
},
watch: {
otp: function(v) {
console.log(v)
let self = this
setTimeout(function() {
self.checkValueChange(v)
}, 5000)
}
}
}
</script>
您无需查看 otp 值即可实现。您只需要在setTimeout
回调中检查otp
数据属性 的值是否为空。您可以将其添加到 handleJumpPage
方法中(上面的代码中缺少该方法):
setTimeout(() => {
if (this.otp === "") {
// disconnect
}
}, 5000)
编辑
如果您想添加一个超时来检查 otp 是否在组件安装后 5 秒内更改,您可以添加一个额外的标志作为数据 属性 并检查其值:
data: {
otp: "",
otpUpdated: false
},
watch: {
otp() {
otpUpdated = true
}
},
mounted() {
setTimeout(() => {
if (!this.otpUpdated) {
// disconnect
}
}, 5000)
}
假设您在用户访问页面后立即开始 5 秒倒计时。您需要在页面加载后开始倒计时。您可以使用已安装的生命周期挂钩来做到这一点。
mounted: function() {
setTimeout(() => {
this.checkValueChange(this.otp)
}, 5000)
}
代码沙箱 link - https://codesandbox.io/s/damp-snowflake-tovs2
我是Vue.js的新人。目前,我正在创建一个验证对话框来查看用户的 otp 是否有效。如果该值在 5 秒内未更改,我的应用程序将自动断开连接。但是,如果我使用watch
来监控这个值,它并没有起作用,因为这个值没有改变,watch
不会触发。
如何监控5秒内没有变化的值?
对话框
<template>
<div>
<input type="text" v-model="otp">
<b-button size="md" @click="cancel()" class="jump-to-ada-btn-cancel">
Cancel
</b-button>
<b-button size="md" @click="handleJumpPage()" class="jump-to-ada-btn">
Send
</b-button>
</div>
</template>
<script>
export default {
data () {
return {
otp: ""
}
},
computed: {
show: {
get: function () {
return this.$store.state.modals.showOTPModal
},
set: function (val) {
this.$store.commit("OPEN_OTP", {fieldName: "showOTPModal", fieldValue: val})
}
}
},
methods: {
checkValueChange(newValue) {
if(newValue === "") {
alert("value is not changed yet")
}
}
},
watch: {
otp: function(v) {
console.log(v)
let self = this
setTimeout(function() {
self.checkValueChange(v)
}, 5000)
}
}
}
</script>
您无需查看 otp 值即可实现。您只需要在setTimeout
回调中检查otp
数据属性 的值是否为空。您可以将其添加到 handleJumpPage
方法中(上面的代码中缺少该方法):
setTimeout(() => {
if (this.otp === "") {
// disconnect
}
}, 5000)
编辑
如果您想添加一个超时来检查 otp 是否在组件安装后 5 秒内更改,您可以添加一个额外的标志作为数据 属性 并检查其值:
data: {
otp: "",
otpUpdated: false
},
watch: {
otp() {
otpUpdated = true
}
},
mounted() {
setTimeout(() => {
if (!this.otpUpdated) {
// disconnect
}
}, 5000)
}
假设您在用户访问页面后立即开始 5 秒倒计时。您需要在页面加载后开始倒计时。您可以使用已安装的生命周期挂钩来做到这一点。
mounted: function() {
setTimeout(() => {
this.checkValueChange(this.otp)
}, 5000)
}
代码沙箱 link - https://codesandbox.io/s/damp-snowflake-tovs2