当前位置:   article > 正文

vue中对数组值变化的监听与重新响应渲染的方法_vue watch监听值变化重新调用render方法

vue watch监听值变化重新调用render方法

在我们项目开发过程中,实例中的数据类型可以是对象、数组等。在对象中,某个属性值发生更改时,我们可以通过对象的深度监听,以达到重新渲染页面的需求。或者查阅博主的文章 https://blog.csdn.net/weixin_37861326/article/details/81034231

例如:

  1. <script>
  2. export default {
  3. data(){
  4. return {
  5. objVal: {
  6. name: 'obj',
  7. type: 'obj'
  8. }
  9. }
  10. },
  11. watch:{
  12. objVal:{
  13. handler(val,oldval){
  14. },
  15. deep: true,
  16. }
  17. },
  18. methods:{
  19. changeObj(){
  20. this.objVal.name = 'newobj';
  21. }
  22. }
  23. }
  24. </script>

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

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. arrList: [1,2,3,4,5]
  6. };
  7. },
  8. watch: {
  9. arrList: {
  10. handler(val, oldval) {
  11. },
  12. deep: true
  13. }
  14. },
  15. methods: {
  16. changeArr() {
  17. // 无效
  18. this.arrList[0] = 10;
  19. }
  20. }
  21. };
  22. </script>

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

使用方法:

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

具体使用案例:

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. arrList: [1,2,3,4,5]
  6. };
  7. },
  8. methods: {
  9. changeArr() {
  10. // this.arrList[0] = 10;
  11. // 修改为:
  12. this.arrList.splice(0, 1, 10);
  13. }
  14. }
  15. };
  16. </script>

或:

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. arrList: [1,2,3,4,5]
  6. };
  7. },
  8. methods: {
  9. changeArr() {
  10. // this.arrList[0] = 10;
  11. // 修改为:
  12. this.$set(this.arrList, 0, 10);
  13. }
  14. }
  15. };
  16. </script>

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/332192?site
推荐阅读
相关标签
  

闽ICP备14008679号