首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在直接css/样式更改和从数组中删除项时,vue.js的奇怪行为

在直接css/样式更改和从数组中删除项时,vue.js的奇怪行为
EN

Stack Overflow用户
提问于 2018-06-07 05:03:01
回答 1查看 316关注 0票数 0

似乎Vue保留了已删除项的样式,并将其应用于与已删除项具有相同索引的新项。

请检查下面的示例。项将正确删除,但我们直接更改的样式将保留为下一项。这是正常行为吗?

我知道我们可以在这里使用v-bind:stylev-bind:class,这将解决问题,但有时你需要使用第三方库直接更改样式,在这种情况下,我们不能使用v-bind。为什么Vue不删除相应的DOM对象,我们从数组中删除了它的项?

代码语言:javascript
复制
var init = function() {
    var app = new Vue({
        el: '.app',
        data: {
            list: [{val: 1}, {val: 2}, {val: 3}, {val: 4}, {val: 5}],
        },
        methods: {
            delete_item: function(item) {
                var index = this.list.indexOf(item);
                this.list.splice(index, 1);
            },
        },
    });
};
var make_it_red = function() {
    document.querySelectorAll('div span')[2].style.color = 'red';
};
window.onload = init;
代码语言:javascript
复制
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div class="app">
    <p>First click on make it red button and then try to delete red item.</p>
    <div v-for="i in list">
        <span>item {{i.val}}</span>
        <button v-on:click="delete_item(i)">delete</button>
    </div>
    <button onclick="make_it_red()">make it red</button>
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:25:18

问题是您没有在v-for中定义密钥

尝试使用<div v-for="i in list" :key="i" >

不过,为了获得最佳结果,您应该在对象<div v-for="i in list" :key="i.id" >中使用专用的id。

您看到这个问题的原因是vue使用键来标识对象,所以当有更改但没有键时,vue会将其视为相同的对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档