尝试拼接对象的最后一个元素时出现 Vue2 错误

Vue2 error when trying to splice last element of object

我有一个 Vue2 应用程序,其中包含一个项目列表,我可以选择并显示或删除这些项目。

当删除列表中的最后一个元素(并且只有最后一个)时 - 我收到 Vue 警告 - “[Vue 警告]:呈现根实例时出错:“

我的HTML:

<body >
  <div id="app">
    <ul>
      <li v-for="(item, index) in list" v-on:click = "selectItem(index)" >
        <a>{{ item.name }}</a>
        <div v-on:click="deleteItem(index)">X</div>
      </li>
    </ul>
    <div>
     <span>{{selectedItem.name}}</span>
    </div>
  </div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</body>

JS:

var app = new Vue({
      el: '#app',
      data: {
        index: 0,
        selectedItem: {},
        list : [
            { id: 1, name: 'org1', desc: "description1"},
            { id: 2, name: 'org2', desc: "description2"},
            { id: 3, name: 'org3', desc: "description3"},
            { id: 4, name: 'org4', desc: "description4"}
        ]

      },

      methods: {
        deleteItem: function(index) {
           this.list.splice(index,1);
        },
        selectItem: function(index) {
            this.selectedItem = this.list[index];
       },
      }
    })

能否请您告知为什么会发生这种情况以及如何解决这个问题?

当您在 li 级别绑定 selectItem 时出现问题,因此当您单击交叉按钮时,selectItem 被执行并且相同的项目也被删除,导致此错误。

解决此问题的一种方法 可以将 selectItem 绑定移动到 li 中,如下所示

  <li v-for="(item, index) in list">
    <a v-on:click = "selectItem(index)" >{{ item.name }}</a>
    <div v-on:click="deleteItem(index)">X</div>
  </li>

查看工作 fiddle

另一种 方法可以是在 HTML 中打印 selectedItem.name 时,你进行空检查,检查 selectedItem 是否存在以下:

 <span>{{selectedItem && selectedItem.name}}</span>

查看工作 fiddle