【发布时间】:2019-12-13 17:42:39
【问题描述】:
我是 Vue js 的新手,我有这样的代码:
Para.vue
<template>
<t-row>
<t-col :span="13">
<t-input
:id="id+'_tam'"
ref="tam"
v-model="ayristirilmisPara.tam"
reverse
:label="label"
:disabled="disabled"
name="Oran *"
:labelSpan="15"
:inputSpan="8"
:maxlength="tamMaxLength"
:vNumber="true"
@input="updateTam"
v-validate="{ required: this.isRequired }"
:error="errors.first('Oran *')"
class="para"
/>
</t-col>
<t-col :span="1" style="padding-left: 0px; padding-right: 0px; padding-top: 12.5px;">,</t-col>
<t-col :span="10">
<t-input
ref="kesir"
:id="id+'_kesir'"
v-model="ayristirilmisPara.kesir"
:maxlength="kesirMaxLength"
:vNumber="true"
:disabled="disabled"
:name="'Oran Kesir *'"
:labelSpan="0"
:inputSpan="18"
label
@input="updateKesir"
v-validate="{ required: this.isRequired }"
:error="errors.first('Oran Kesir *')"
class="para"
/>
</t-col>
<t-col :span="1"></t-col>
</t-row>
</template>
<script>
export default {
props: {
tamMaxLength: {
type: Number,
default: 3
},
kesirMaxLength: {
type: Number,
default: 2
},
value: {
type: [String, Number],
default: "0.00"
},
label: {
type: String,
default: "",
required: false
},
isRequired: {
type: Boolean,
default: false,
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
data() {
return {
tam: "0",
kesir: "0"
};
},
methods: {
updateTam(tam) {
if (!tam) tam = "";
this.tam = tam;
this.$emit("input", `${tam}.${this.kesir}`);
},
updateKesir(kesir) {
if (!kesir) kesir = "";
this.kesir = kesir;
this.$emit("input", `${this.tam}.${kesir}`);
}
},
computed: {
ayristirilmisPara() {
if (this.value === undefined || this.value === null) this.value = "0.0";
const paraParcali = this.value.toString().split(".");
let tutar = {
tam:
paraParcali[0] == null
? 0
: paraParcali[0] || paraParcali[0] == ""
? 0
: paraParcali[0],
kesir:
paraParcali[1] == null
? 0
: paraParcali[1] || paraParcali[1] == ""
? 0
: paraParcali[1]
};
this.tam = tutar.tam;
this.kesir = tutar.kesir;
this.$emit("input", `${tutar.tam}.${tutar.kesir}`);
return tutar;
}
}
};
</script>
<style>
.el-input {
min-width: 45px;
}
.para .el-input__inner {
padding: 0px;
}
</style>
它工作正常。当用户尝试删除所有带有 id'+_tam' 和 id+'_kesir' 的输入区域时,它会自动置为 0。我想要做的是,我想等待 3 秒让用户输入一个输入,如果他/她没有输入一个,那么我将输入 0。我尝试在计算属性中编写以下代码:
computed: {
ayristirilmisPara() {
setInterval(function() {
if (this.value === undefined || this.value === null) this.value = "0.0";
const paraParcali = this.value.toString().split(".");
let tutar = {
tam:
paraParcali[0] == null
? 0
: paraParcali[0] || paraParcali[0] == ""
? 0
: paraParcali[0],
kesir:
paraParcali[1] == null
? 0
: paraParcali[1] || paraParcali[1] == ""
? 0
: paraParcali[1]
};
this.tam = tutar.tam;
this.kesir = tutar.kesir;
this.$emit("input", `${tutar.tam}.${tutar.kesir}`);
return tutar;
}, 3000);
}
}
但它没有用。我怎样才能做到这一点?感谢您的关注。
【问题讨论】:
-
在你的超时函数
setTimeout(function () { this.something() }.bind(this), 3000)或者var self = this; setTimeout(function () { self.something() } , 3000)之后尝试绑定 -
你不能从 setTimeout 返回任何东西。计算属性不适合产生副作用。
标签: javascript vue.js frontend