做项目时踩到的坑,在前端通过axios.get向后台请求数据,通过params传递一个对象,当通过this.getUserparams.pagesize=val直接修改传递对象的值时,发现后台请求的数据没有发生改变,此时修改的数据并不是响应式的数据。
要修改对象或者数组中的值并想要进行响应式处理的时候需要通过set方法进行修改:
Vue.set(this.getUserparams, 'pagesize', val)
或者
this.$set(this.getUserparams, 'pagesize', val)(this指向的是Vue对象)
下面就写一个小demo
<div id="app">
<ul>
<li v-for='item in list'>{{item}}</li>
</ul>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
list: ['apple', 'orange', 'banana'],
}
});
</script>
当在浏览器控制台输入下边语句的时候,页面上显示的数据并不会响应式改变
vm.list[0] = 'lemon';
只要当使用set方法时,页面数据才会动态修改
vm.$set(vm.list, 1, 'lemon');