使用Nuxt/Vue Vutify填写第一个输入时,根据范围条件自动填充第二个文本输入(&V)
我正在使用Nuxt&;Vutify创建承包商注册表。
我有一个表单,其中是第一个输入(一),用户需要键入合同价值(例如:50美元)。在第二个输入(两个)上,它将根据所定位的合同值的范围自动填充字符串值。填写完表单后,用户将提交表单。
伪代码如下所示:
Let say the user write "13" on the 1st input, 2nd input will auto display "b2".
if ( ONE < 10 ) {
TWO = "a1" //2nd input will display a1
} else if ( 10 < ONE < 20) {
TWO = "b2" //2nd input will display b2
} else if ( 20 < ONE < 30) {
TWO = "c3" //2nd input will display c3
}
这是我到目前为止所做的工作:
NUXT/VUE模板
<v-col cols="12" sm="6" md="6">
<label style="font-size: 1.5rem;">Estimated Contract Value (RM)</label>
<v-text-field
v-model="editedItem.EstimatedContractValue"
outlined
></v-text-field>
</v-col>
<v-col cols="12" sm="6" md="6">
<label style="font-size: 1.5rem;">Works Grade</label>
<v-text-field
v-model="editedItem.WorksGrade"
outlined
:items="worksgrade"
></v-text-field>
</v-col>
脚本
watch: {
"editedItem.EstimatedContractValue"(newVal) {
this.worksgrade = [];
if (this.EstimatedContractValue < 200000) {
// this.editedItem.WorksGrade = "G1";
this.editedItem.worksgrade.push("G1");
} else if (200000 < this.EstimatedContractValue < 500000) {
// this.editedItem.WorksGrade = "G2";
this.editedItem.worksgrade.push("G2");
} else if (500000 < this.EstimatedContractValue < 1000000) {
// this.editedItem.WorksGrade = "G3";
this.editedItem.worksgrade.push("G3");
} else if (1000000 < this.EstimatedContractValue < 3000000) {
// this.editedItem.WorksGrade = "G4";
this.editedItem.worksgrade.push("G4");
} else {
alert("oi lebih dah ni!")
}
}
}
目前,在我填满第一个输入后,第二个输入没有显示任何内容。我在使用观察者,但不确定这是不是正确的方式。如何使用Nuxt&;Vutify执行此操作?
解决方案
IF/ELSE条件:
在相同条件下,这不是计算小于/大于的有效方法:
200000 < this.EstimatedContractValue < 500000
它应该用&&
分隔,变量名应该是newVal
,因为这是您在Watcher参数中定义值的方式:
200000 < newVal && newVal < 500000
editedItem对象的反应性
editedItem
是否如下例所示是计算对象?如果是,则this.WorksGrade = "G1"
将按您的需要工作。如果它在数据中且未计算,则需要使用this.$set(this.editedItem, 'WorksGrade', 'G1')
设置值。Documentation on Vue reactivity for objects
data: () => ({
EstimatedContractValue: null,
WorksGrade: null,
}),
computed: {
editedItem() {
return {
EstimatedContractValue: this.EstimatedContractValue,
WorksGrade: this.WorksGrade,
}
},
},
watch: {
EstimatedContractValue(value) {
/* your code setting works grade */
}
},
在您的情况下,我不建议在观察器中设置第二个值,因为当用户键入第一个值时,观察器将运行每个字符。而是将@blur="updateWorksGrade
添加到第一个字段,以便在第一个字段失去焦点时更新第二个值。
updateWorksGrade(event) {
const contractValue = event.target.value;
/* your code setting works grade */
}
相关文章