Vue.set全局操作

Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。比如在vue构造器内部定义了一个count为1的数据,我们在构造器外部定义了一个方法,要每次点击按钮给值加1.就需要用到Vue.set。
// 构造器外部数据
     wrapData ={
        number:1
     }
       var vm = new Vue({
            el:"#app",
            data:wrapData,  //引入外部数据(非内部构造器里面的)
            methods:{
                add:function(){
                    this.number++;
                }
            }
       })

html

<div id="app">
  <!-- <button v-on:click="add">数据变化</button> -->
  <button onclick="add()">数据变化</button>
  <div>{{number}}</div>
</div>
在外部改变数据的三种方法    这些个button按钮都是写在外部 ,而不在new  vue({})作用域里面
1、用Vue.set改变
 function add(){
       Vue.set(wrapData,'number',4);
 }
2、用Vue对象的方法添加
 function wrapAdd2(){
         vm.number++;
       }
3、直接操作外部数据
 function wrapAdd3(){
      wrapData.number++;
   }
为什么要有Vue.set的存在?
由于Javascript的限制,Vue不能自动检测以下变动的数组。
*当你利用索引直接设置一个项时,vue不会为我们自动更新。
*当你修改数组的长度时,vue不会为我们自动更新。
上面不是说到了三种改变number值得方法吗,如果是改变数组,通过下标,那三种方式中只有Vue.set会起作用,这也就是它存在的意义

html

<div id="app">
        <!-- <span v-text="number"></span> -->
        <ul>
            <li v-for="item of items">{{item}}</li>
        </ul>
    </div>

js

function  wrapAdd(){
           // vm.items[0]=12; //外部调用vue属性方法不起作用
           // wrapData[0]=12; //外部直接操作数组也是不起作用
           // 这时候Vue.set在对数组方面就凸显出用处了
           Vue.set(vm.items,1,12)
      }
    var wrapData =[20,30,45]

       var vm = new Vue({
            el:"#app",
            data:{
                items:wrapData
            }  //引入外部数据(非内部构造器里面的)
       })
原文地址:https://www.cnblogs.com/Model-Zachary/p/6940969.html