vue.js:HTML 元素显示-如果不切换更改 [英] vue.js: HTML element show-if not toggling changes

查看:32
本文介绍了vue.js:HTML 元素显示-如果不切换更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最初将 API 调用中的一些对象渲染到我的数据库,它们被序列化并且最初看起来像这样:

数据库消息

<p v-if="messages.length ===0">没有消息</p><div class="msg" v-for="(msg, index) in messages" :key="index"><p class="msg-index">[{{index}}]</p><p class="msg-subject" v-html="msg.subject" v-if="!msg.editing"></p><p><input type="text" v-model="msg.subject" v-if="msg.editing" ></p><p>{{msg.editing}}</p><p class="msg-body" v-html="msg.body" v-show="!messages[index].editing"></p><p><input type="text" v-model="msg.body" v-show="messages[index].editing" ></p><input type="submit" @click="deleteMsg(msg.pk)" value="Delete"/><input type="submit" @click="EditMsg(index)" value="Edit"/><input type="submit" @click="updateMsg(msg.pk)" value="更新"/>

</模板><脚本>导出默认{name: "消息",数据() {返回 {主题: "",msgBody: "",消息:[],};

},

每条消息看起来像这样:

注意 bodypksubject 是 Django 模型字段.数组中的每一项都代表一个数据库对象.

我想要使用 vue.js 做的是允许用户编辑每个项目.如果用户单击某个项目的 edit 按钮,我想将其元素从 p 转换为 input,并将其提交到数据库.

为了允许编辑单个项目,我需要在数组中的每个项目中都有一个 editing 字段,所以我在我的 mounted() 属性:

 安装(){this.fetchMessages();},方法: {fetchMessages() {this.$backend.$fetchMessages().then(responseData => {this.messages = responseData;this.messages.forEach(函数(值){值['编辑'] = 假;});控制台日志(this.messages);});},

现在,当我在控制台中加载数组时,我看到了:

所以我假设现在,当用户点击 Edit 按钮时,EditMsg 被调用,字段将根据 v-if/v-show 指令:

EditMsg(msgIdx) {this.messages[msgIdx].editing = true;控制台日志(this.messages);},

但这并没有发生.实际发生的情况是:在控制台/vue-developer-tools 窗口中,项目的 editing 标志更改为 true,但 HTML 中没有任何变化.

我错过了什么?

完整代码: