对数组进行赋值 Vue 无法响应

发布于 2024-03-26 12:14:27 字数 2410 浏览 20 评论 0

<!DOCTYPE html>
<html lang="en">
<head>
  <script src="js/vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<div id="app">

  <h3>学生列表</h3>
  <ul>
    <li v-for="(item,key) in items">
      <h4>{{item.name}}</h4>
      <p>{{item.age}}</p>
    </li>
  </ul>
  <button @click="changeButton">直接赋值操作</button>
  <button @click="changeButton2">通过数组内置方法操作</button>
</div>
<script type="text/javascript">
  let count = 1;
  let vue = new Vue({
    el: "#app",
    data: {
      items: [
        {
          name: "张三",
          age: 12
        },
        {
          name: "张三",
          age: 12
        },
        {
          name: "张三",
          age: 12
        }
      ]
    },
    methods: {
      changeButton() {
        count++;
        this.items[0] = {
          name: '张三' + count,
          age: count
        }
      },
      changeButton2() {
        count++;
        this.items.splice(0,1,{
          name: '张三' + count,
          age: count
        })
      }
    }
  });
</script>
</body>
</html>

在上面代码中 changeButton 事件是直接修改数组的某一个值,但是我们在触发这个事件后发现页面上与这个数组元素绑定的显示并没有发生改变。

这是因为 Vue 并没有监听我们对数组元素的直接修改,我们需要需要借助 splice 对数组元素进行替换,这种方式的赋值 Vue 是能够监听到的,然后实时改变页面 Dom 的显示。

splice 方法

  • splice(start: number, deleteCount: number, ...items: T[])
    • start:用于指明删除操作开始位置的索引值
    • deleteCount: 删除元素的个数
    • items:可变参数,表示在删除完成后,需要插入的元素

借助 splice 我们可以完成删除、替换、新增操作,例:

  • arr.splice(5,0,'A','B') :在 index=5 的后面插入 A、B 两个元素。
  • arr.splice(3,1) :删除 index=3 的元素
  • arr.splice(5,2,'A','B') :将 index=5,6 的元素分别替换为'A'、'B'

我们在前面看到了对数组中的元素直接进行赋值操作,是无法被 Vue 响应的,我们需要借助数组中的方法才能触发 Vue 的响应。但是我们如果修改数组元素中的属性值,是能够被 Vue 响应的,我们在上面代码的基础上创建一个新的事件:

changeButton3() {
  count++;
  this.items[0].name='new Value ' + count;
}

当我们触发这个事件时,我们可以发现 Vue 做出了响应。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

爱格式化

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文