我在 vue3 中发生了奇怪的事情
Strange thing happening with me in vue3
所以我有这个输入循环(下面的代码:))。所以基本上我试图通过一个唯一的引用来获取该循环中的每个输入,就像它在 Vue3 文档中解释的那样 => Here
我有这个数组 inputs
,我在其中保存了文档建议的所有输入。我想在这里实现的是获得最后的价值。但我面临一个奇怪的问题,这就是我来这里的原因。
因此,当我尝试 console.log
该数组的最后一个值时,我得到的是之前的最后一个而不是最后一个(我将用图像解释以获得更多理解)。当我 console.log
inputs
array 我可以看到它包含最后一个值,但我无法用我尝试的所有方法得到它:
console.log(inputs.value[inputs.value.length-1])
console.log(inputs.value.at(-1))
html代码:
<n-card v-for="(item, index) in counter" :key="index" title="Card">
<div v-if="item.val == 'radio'">
<div class="row" v-for="(i, index) in item.items" :key="index">
<div class="col-1">
<n-icon size="25">
<radio-icon></radio-icon>
</n-icon>
</div>
<div class="col-10">
<n-input
:ref="el => {if (el) inputs[index] = el}"
@focus="$event.target.select()"
v-model:value="i.name"
placeholder="taper ici"
>
</n-input>
</div>
<div class="col-1">
<n-button v-if="item.items.length > 1"
@click="deleteOption(item.id, i.id)"
>
<n-icon size="20">
<delete-icon />
</n-icon>
</n-button>
</div>
</div>
</div>
</n-card>
脚本:
const Add = id => {
const found = counter.value.find(item => item.id === id)
if (found.items.length > 0){
let lastValue = found.items[found.items.length-1].inc
lastValue++
found.items.push(
{
id: new Date().valueOf(),
name: `option ${lastValue}`,
inc: lastValue
}
)
inputs.value[inputs.value.length-1].focus()
console.log(inputs.value[inputs.value.length-1])// here I get before last value
console.log(inputs.value.at(-1))// here I get before last value
console.log(inputs.value)//here I get all inputs including last one
}
else {
let lastValue = 1
found.items.push(
{
id: new Date().valueOf(),
name: `option ${lastValue}`,
inc: lastValue
}
)
}
}
请大家帮忙,抱歉我的英语不好。
我会在 github 中推送代码。如果有人想查看完整代码并希望提供帮助。我将不胜感激任何帮助。快把我逼疯了。
我认为问题在于,在设置数据和尝试在“ui”(inputs) 列表中搜索数据之间没有“重新呈现”。尝试在 found.items.push
之后添加 await nextTick()
。然后 vue 可以重新渲染并且 v-for
会将项目添加到 inputs
。
所以我有这个输入循环(下面的代码:))。所以基本上我试图通过一个唯一的引用来获取该循环中的每个输入,就像它在 Vue3 文档中解释的那样 => Here
我有这个数组 inputs
,我在其中保存了文档建议的所有输入。我想在这里实现的是获得最后的价值。但我面临一个奇怪的问题,这就是我来这里的原因。
因此,当我尝试 console.log
该数组的最后一个值时,我得到的是之前的最后一个而不是最后一个(我将用图像解释以获得更多理解)。当我 console.log
inputs
array 我可以看到它包含最后一个值,但我无法用我尝试的所有方法得到它:
console.log(inputs.value[inputs.value.length-1])
console.log(inputs.value.at(-1))
html代码:
<n-card v-for="(item, index) in counter" :key="index" title="Card">
<div v-if="item.val == 'radio'">
<div class="row" v-for="(i, index) in item.items" :key="index">
<div class="col-1">
<n-icon size="25">
<radio-icon></radio-icon>
</n-icon>
</div>
<div class="col-10">
<n-input
:ref="el => {if (el) inputs[index] = el}"
@focus="$event.target.select()"
v-model:value="i.name"
placeholder="taper ici"
>
</n-input>
</div>
<div class="col-1">
<n-button v-if="item.items.length > 1"
@click="deleteOption(item.id, i.id)"
>
<n-icon size="20">
<delete-icon />
</n-icon>
</n-button>
</div>
</div>
</div>
</n-card>
脚本:
const Add = id => {
const found = counter.value.find(item => item.id === id)
if (found.items.length > 0){
let lastValue = found.items[found.items.length-1].inc
lastValue++
found.items.push(
{
id: new Date().valueOf(),
name: `option ${lastValue}`,
inc: lastValue
}
)
inputs.value[inputs.value.length-1].focus()
console.log(inputs.value[inputs.value.length-1])// here I get before last value
console.log(inputs.value.at(-1))// here I get before last value
console.log(inputs.value)//here I get all inputs including last one
}
else {
let lastValue = 1
found.items.push(
{
id: new Date().valueOf(),
name: `option ${lastValue}`,
inc: lastValue
}
)
}
}
请大家帮忙,抱歉我的英语不好。 我会在 github 中推送代码。如果有人想查看完整代码并希望提供帮助。我将不胜感激任何帮助。快把我逼疯了。
我认为问题在于,在设置数据和尝试在“ui”(inputs) 列表中搜索数据之间没有“重新呈现”。尝试在 found.items.push
之后添加 await nextTick()
。然后 vue 可以重新渲染并且 v-for
会将项目添加到 inputs
。