#javascript #vue.js #vuejs2 #vue-component #vuejs3
Вопрос:
у меня есть two text boxes
, оба текстовых поля будут иметь значение.
но я хочу получить value of one text box based on id number
то, что я войду.
если я войду 1 it should show value of text box 1.
Вот что я попробовал, прямо сейчас он показывает данные из обоих текстовых полей.
шаблон:
<input v-model="textdata1" id="1" type="text" placeholder="i am id1, show my value">
<input v-model="textdata2" id="2" type="text" placeholder="i am id2, show my value">
<input v-model="searchid" type="text" placeholder="which ids data you want, 1 or 2 ">
<button @click="getvalue">RECEIVE</button>
<div>show value of id 1or2 here: {{id1data}}</div>
ВУЭЙС:
<script>
import { defineComponent,ref } from 'vue'
export default defineComponent({
setup() {
const id1data =ref("");
const id2data =ref("");
function getvalue(){
this.id1data=this.textdata1;
this.id2data=this.textdata2;
}
return{
id1data,
id2data,
getvalue,
}
}
})
</script>
Комментарии:
1. почему именно ID? вы уже используете
v-model
2. я хочу получить данные, основанные на моем выборе, это может быть что угодно уникальное. я думал, что идентификатор может быть уникальным, поэтому я пытался получить данные по идентификатору.
Ответ №1:
Если вы настаиваете на использовании идентификаторов вместо этого, вот способ сделать именно это:
<script>
import { defineComponent, ref } from "vue";
export default defineComponent({
setup() {
const value = ref("");
const searchid = ref("");
const searchidinput = ref("");
function getvalue() {
this.searchid = this.searchidinput
const el = document.getElementById(this.searchid);
if (el) {
this.value = el.value
}
}
return {
value,
searchid,
searchidinput,
getvalue,
};
},
});
</script>
<template>
<input id="1" type="text" placeholder="i am id1, show my value" />
<input id="2" type="text" placeholder="i am id2, show my value" />
<input v-model="searchidinput" type="text" placeholder="which ids data you want, 1 or 2 " />
<button @click="getvalue">RECEIVE</button>
<div>show value of id {{ searchid ? searchid : "<none>" }} here:
{{ value ? value : "none selected"}}
</div>
</template>
<style scoped>
a {
color: #42b983;
}
</style>
Комментарии:
1. Спасибо, я думаю, что это универсальный метод, но я получаю ошибку: searchidinput’ присваивается значение, но никогда не используется
2. Я обновил код, чтобы устранить проблему.
3. если я введу 1, он покажет значение из текстового поля 1, это нормально, если я введу 33 после этого, он все равно покажет значение идентификатора 1.
4. добавьте оператор else и назначьте
this.value
все, что вы хотите отобразить5. @Fayakon это тоже сработало бы
Ответ №2:
Вот один из способов сделать это. Вы можете создать пару значений данных для каждого ввода.
<script>
import { defineComponent, ref } from "vue";
export default defineComponent({
setup() {
const textdata1 = ref("");
const id1data = ref("");
const textdata2 = ref("");
const id2data = ref("");
const searchid = ref("");
const searchidinput = ref("");
function getvalue() {
this.searchid = this.searchidinput;
switch (this.searchid) {
case "1":
this.id1data = this.textdata1;
break;
case "2":
this.id2data = this.textdata2;
break;
}
}
return {
textdata1,
id1data,
textdata2,
id2data,
searchid,
searchidinput,
getvalue,
};
},
});
</script>
<template>
<input v-model="textdata1" id="1" type="text" placeholder="i am id1, show my value" />
<input v-model="textdata2" id="2" type="text" placeholder="i am id2, show my value" />
<input v-model="searchidinput" type="text" placeholder="which ids data you want, 1 or 2 " />
<button @click="getvalue">RECEIVE</button>
<div>show value of id {{ searchid ? searchid : "<none>" }} here:
{{ searchid === "1" ? id1data : searchid === "2" ? id2data : "none selected"}}
</div>
</template>
<style scoped>
a {
color: #42b983;
}
</style>
Вы также можете прибегнуть к использованию reactive()
вместо этого для краткости и организации.