为了账号安全,请及时绑定邮箱和手机立即绑定

Vue 反应性不会获取添加到数组元素的新属性

Vue 反应性不会获取添加到数组元素的新属性

尚方宝剑之说 2022-12-18 19:00:35
不确定我的解释是否正确,但我面临一个问题,我的模板元素之一没有对数组元素的添加属性做出反应。例如:<div v-for="user in users"     v-bind:key="user.id"     v-bind:name="user.name">     {{user.name}}     <div class="warn" v-if="user.hasWarning">Warning!</div></div>我试图在hasWarning: true添加到时显示警告userdata:() {  users: [    {id: 1, name: "Foo"}  ]},methods:{  showWarning: function(id) {    users.forEach(user => {      if (user.id == id) {        user.hasWarning = true;      }    });  }}我试着打电话showWarning(id),我确实看到hasWarning从控制台和 Vue 开发人员工具添加到用户,但它没有呈现<div class class="warn" v-if="user.hasWarning"..。如果我将我的用户设置为{id: 1, name: "foo", hasWarning: false},它似乎工作正常,但为什么它不适用于添加的属性?我应该完全避免它吗?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您必须使用该方法this.$set来注册新属性。请参阅文档:https ://v2.vuejs.org/v2/api/#vm-set

尝试这样的事情:

<template>

  <div>

    <div v-for="user in users" v-bind:key="user.id" v-bind:name="user.name">

      {{ user.name }}

      <button @click="showWarning(user.id)">showWarning</button>

      <div class="warn" v-if="user.hasWarning">Warning!</div>

    </div>

  </div>

</template>


<script>

export default {

  name: 'App',

  data: () => ({

    users: [{ id: 1, name: 'Foo' }, { id: 2, name: 'Bar' }],

  }),

  methods: {

    showWarning(id) {

      let user = this.users.find(user => user.id == id);

      this.$set(user, 'hasWarning', true);

    },

  },

};

</script>


查看完整回答
反对 回复 2022-12-18
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信