javascript - vuejs/js 对象发生变化但没有反射(reflect)在 DOM 中

标签 javascript vue.js vuejs2

我正在尝试遍历对象数组并打印列表项。我有一个点击监听器,它向对象添加一个自定义属性,并且类绑定(bind)依赖于该属性值。 这是我的代码,请看一下。

HTML

<div class="row wi ony-bor-ans" v-if="q.ans" v-for="(ans,i) in q.ans" :key="i">
<div class="col-auto que-ans-main-ul">
    <ul>
        <li @click="voteOnAns(1,i)" :class="{voted:ans.ansVotedUp}">
            <i class="fa fa-chevron-up"></i>
        </li>
        <li><span>{{i}}</span></li>
        <li @click="voteOnAns(-1,i)" :class="{voted:ans.ansVotedDown}">
            <i class="fa fa-chevron-down"></i>
        </li>
    </ul>
</div>

我的 vue 方法 voteOnAns 看起来像这样

voteOnAns(ansVoteType,i){
if(ansVoteType>0){
    this.q.ans[i].ansVotedUp=true;
    this.q.ans[i].ansVotedDown=false;
}else{
    this.q.ans[i].ansVotedDown=true;
    this.q.ans[i].ansVotedUp=false;
}
console.log(this.q.ans);

此处 this.q.ans 正确打印了特定对象。

另一件有趣的事情是,我正在使用 vue chrome 扩展程序,有时我看到添加了这个新属性,有时它们不在对象中。但是 console.log 正确显示了对象。

非常感谢任何帮助或解释。 谢谢。

最佳答案

由于 Javascript 的限制,Vue can not detect property additions所以这些新属性不是 react 性的。

你必须使用 Vue.set 来动态添加响应式属性:

Vue.set(this.q.ans[i], 'ansVotedUp', true);

关于javascript - vuejs/js 对象发生变化但没有反射(reflect)在 DOM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47696237/

相关文章:

javascript - 单击子项或单击子菜单时需要激活父类

Javascript 按顺序排序数组

vue.js - Vuetify 有没有隐藏一个 v-text-field 附加图标

javascript - 在 vuejs 中加载更多按钮

javascript - Vue.js 使用计算属性来显示或隐藏组件的一部分

javascript - 如何在管理页面中将自定义脚本实现到django中? Python

javascript - Highcharts Areaspline - 突出显示悬停效果的列

javascript - 省略号过滤器vueJs

javascript - Vue.js - 如何在点击时切换图标类

javascript - 在没有插值的情况下在 vue 2 模板中设置部分属性(用于超赞字体图标)的解决方法?