在vue中对数组值变化的监听与重新响应渲染操作

 更新时间:2020年07月17日 10:11:42   作者:_cris  
这篇文章主要介绍了在vue中对数组值变化的监听与重新响应渲染操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在我们项目开发过程中,实例中的数据类型可以是对象、数组等。在对象中,某个属性值发生更改时,我们可以通过对象的深度监听,以达到重新渲染页面的需求。或者查阅这篇文章

例如:

<script>
 export default {
 data(){
 return {
 objVal: {
  name: 'obj',
  type: 'obj'
 }
 }
 },
 watch:{
 objVal:{
 handler(val,oldval){
 
 },
 deep: true,
 }
 },
 methods:{
 changeObj(){
 this.objVal.name = 'newobj';
 }
 }
 }
</script>

但是,在使用同一种方式进行数组值更改监听时,这种做法是无效的。

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 watch: {
 arrList: {
 handler(val, oldval) {
 
 },
 deep: true
 }
 },
 methods: {
 changeArr() {
 // 无效
 this.arrList[0] = 10;
 }
 }
};
</script>

上述用以监听数组值变化的方法是无效的,vue是不会响应数据变化而重新去渲染页面。在vue中仅需要通过修改赋值语句的方式,即可让vue响应数组数据的变化。具体操作如下:

使用方法:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

具体使用案例:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.arrList.splice(0, 1, 10);
 }
 }
};
</script>

或:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.$set(this.arrList, 0, 10);
 }
 }
};
</script>

以上两种方式,均可达到监听数组值变化的效果。

补充知识:vue数组操作不触发前端重新渲染

暂时使用给数组先赋值 [ ] ,然后重新赋值的方式解决。

此外,能够监听的数组变异方法

https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC%82%E6%96%B9%E6%B3%95

还有就是set

相关文章

  • Vue入门之animate过渡动画效果

    Vue入门之animate过渡动画效果

    这篇文章主要介绍了Vue入门之animate过渡动画效果的相关资料,需要的朋友可以参考下
    2018-04-04
  • 基于vue 动态加载图片src的解决方法

    基于vue 动态加载图片src的解决方法

    下面小编就为大家分享一篇基于vue 动态加载图片src的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Vue3刷新页面报错404的解决方法

    Vue3刷新页面报错404的解决方法

    本文主要介绍了Vue3刷新页面报错404的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue移动端监听滚动条高度的实现方法

    vue移动端监听滚动条高度的实现方法

    今天小编就为大家分享一篇vue移动端监听滚动条高度的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 浅谈Vuex的状态管理(全家桶)

    浅谈Vuex的状态管理(全家桶)

    本篇文章主要介绍了浅谈Vuex状态管理(全家桶),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • vue中watch监听器用法之deep、immediate、flush

    vue中watch监听器用法之deep、immediate、flush

    Vue是可以监听到多层级数据改变的,且可以在页面上做出对应展示,下面这篇文章主要给大家介绍了关于vue中watch监听器用法之deep、immediate、flush的相关资料,需要的朋友可以参考下
    2022-09-09
  • antd Select下拉菜单动态添加option里的内容操作

    antd Select下拉菜单动态添加option里的内容操作

    这篇文章主要介绍了antd Select下拉菜单动态添加option里的内容操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue router带参数页面刷新或回退参数消失的解决方法

    vue router带参数页面刷新或回退参数消失的解决方法

    这篇文章主要介绍了vue router带参数页面刷新或回退参数消失的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • vue项目中按需引入element-ui的正确实现方法

    vue项目中按需引入element-ui的正确实现方法

    这篇文章主要介绍了vue项目中按需引入element-ui的正确实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 使用VUE实现一键复制内容功能

    使用VUE实现一键复制内容功能

    这篇文章主要介绍了使用VUE实现一键复制内容功能,功能就是当我们点击复制按钮时,会提示“复制成功”,这样复制的内容就可以在其他地方使用了,感兴趣的朋友可以学习一下
    2023-04-04

最新评论