gpt4 book ai didi

javascript - 来自 $refs 的 Vue.js v-for 元素在 watch 函数中损坏

转载 作者:行者123 更新时间:2023-12-03 00:16:33 25 4
gpt4 key购买 nike

使用 Vue.js 2.5.22 和 FireFox 65.0。我错过了什么?

https://jsfiddle.net/r083hqgv/2/

:ref="x" 属性标识的 v-for 元素在 watch 函数中无法按预期工作。我还尝试使用 :id="x"getElementById(),并在 setTimeout(..., 200) 内调用 $nextTick().

上面的代码:

<div id="app" style="position:relative">
<h2>last element top: {{offset+''}}</h2>
<button @click="add()">Add &amp; get top</button>
<ol>
<li v-for="a in list" :key="'r.'+a">
<a @click.stop.prevent="get($event.target)" href="#"
:ref="'r.'+a">get top {{'r.'+a}}</a>
</li>
</ol>
</div>

new Vue({
el: "#app",
data: {
offset: 0,
last: 'unset',
list: [],
},
methods: {
add: function() {
this.last = 'r.'+ this.list.push(this.list.length+1);
this.list = this.list.slice();
},
get: function(iEl) {
this.offset = iEl.offsetTop;
iEl.style = 'font-style:italic';
}
},
watch: {
list: function() {
this.$nextTick(function() {
var aEl = this.$refs[this.last];
if (aEl) this.get(aEl);
});
}
}
})

最佳答案

正如文档 ( $refs ) 所引用的,使用 v-for 时,this.$refs["..."] 返回一个数组。因此,改变

if (aEl) this.get(aEl);

if (aEl) this.get(aEl[0]);

一切都会正常(我已经在你的 jsfiddle 上测试过了)。

关于javascript - 来自 $refs 的 Vue.js v-for 元素在 watch 函数中损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54512346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com