Vue数组响应式变化

1.变异方法(修改原有数据,会影响原有数组数据)
都会被Vue处理成响应式的方式,只要调用这些方法,都会影响到页面中模板内容的变化
this.list.push(this.fname)

  • push()数组末尾添加一个或多个元素
  • pop()删除数组的最后一个元素
  • shit()删除数组的第一个元素
  • unshit()向数组开头添加一个或多个元素
  • splice()删除数组中指定元素
  • sort()对数组中的元素进行排序
  • reverse()反转数组,颠倒顺序

2.替换数组(生成新的数组,不会对原数组产生影响)
调用完之后,他的返回值需要重新赋值给原始的数组
this.list = this.list.slice(1, 2)

  • concat()连接两个或多个数组
  • filter()通过检查指定数组中符合条件的所有元素
  • slice()提取数组中指定元素
<div id="app">
  <div>
    <span>
      <input type="text" v-model="fname">
      <button @click = "add">添加</button>
      <button @click = "del">删除</button>
      <button @click = "change">替换</button>
    </span>
  </div>
  <ul>
    <li :key="index" v-for="(item, index) in list">{{item}}</li>
  </ul>
  <div>{{info.name}}</div>
  <div>{{info.age}}</div>
</div>
<script>
  var vm = new Vue({
    el:"#app",
    data:{
      fname:"",
      list:["apple", "orange", "banana"]
    },
    methods: {
      //数组的响应式方法
      add: function(){
        this.list.push(this.fname)
      },
      del: function(){
        this.list.pop(this.fname)
      },
      change: function(){
        this.list = this.list.slice(1, 2)
      }
    }
  });
</script>

修改响应式数据

一:数组:

  • Vue.set(vm.items, indexOfItem, newValue)
  • Vue.$set(vm.items, indexOfItem, newValue)
  1. 参数一表示要处理的数组名称
  2. 参数二表示要处理的数组的索引
  3. 参数三表示要处理的数组的值

二:对象:
(语法相同)

  1. 参数一表示要处理的对象名称
  2. 参数二表示要处理的添加的新的属性名
  3. 参数三表示要处理的属性的值
  <div id="app">
    <ul>
      <li :key="index" v-for="(item, index) in list">{{item}}</li>
    </ul>
    <div>{{info.name}}</div>
    <div>{{info.age}}</div>
    <div>{{info.gender}}</div>
  </div>
  <script>
    var vm = new Vue({
      el:"#app",
      data:{
        info:{
          name: 'lisa',
          age:"12"
        }
      }
    });
    //数组
    // vm.list[1] = "lhaha";//不是响应式

    // Vue.set(vm.list, 2, "lalal");
    vm.$set(vm.list, 1, "lalal");

    //对象
    // vm.info.gender = "male";//不是响应式
    //对象名称 添加的新的属性名 值
    vm.$set(vm.info, "gender", "male");
  </script>

版权声明:本文为Yueqin0512原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。