1 回答
TA贡献1943条经验 获得超7个赞
在这种情况下,您正在寻找change
事件,该事件将在用户更改输入值时专门激活。
当用户提交对元素的更改时,将为
<input>
、<select>
和元素触发 change 事件。与事件不同,事件不一定会在元素的.<textarea>
value
input
change
value
这意味着无论何时用户更改任一输入中的值,change
事件都会触发,触发关联的方法并更新另一个框。这在没有任何干扰的情况下发生,因为另一个输入在其值以编程方式更新时不会触发change
事件(与跟踪所有值更改的观察者不同),因此不会触发其关联的方法。
你的例子的调整版本:
<template>
<div>
<div class="card-body">
<form>
<div class="row">
<div class="col">
<div class="form-group">
<input
type="text"
v-model="currentLevel"
class="form-control"
@change="updateCurrentPoints"
>
</div>
<div class="form-group">
<input
type="text"
v-model="currentPoints"
class="form-control"
@change="updateCurrentLevel"
>
</div>
</div>
</div>
</form>
</div>
</div>
</template>
<script>
export default {
data() {
return {
currentLevel: 1,
currentPoints: 0,
pointsTable: []
}
},
mounted() {
axios.get('/api/points').then(this.fetchPointsTable);
},
methods: {
fetchPointsTable({data}) {
this.pointsTable = data;
},
updateCurrentPoints() { // contents of currentLevel watcher
const result = this.pointsTable.find( ({ level }) => level === parseInt(this.currentLevel) );
this.currentPoints = result.experience;
},
updateCurrentLevel() { // contents of currentPoints watcher
var levels = [];
var goal = this.currentXp;
var closest = this.xpTable.reduce(function(prev, curr) {
if (curr.points <= goal) {
levels = curr.level;
}
return Math.max(levels);
});
this.currentLevel = closest;
},
}
}
</script>
添加回答
举报