Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 824|回复: 0

vue中对象和数组无法触发双向绑定的情况以及解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-26 03:23:03 | 显示全部楼层 |阅读模式

    1. 修改数组中的内容,数组发生了改变,而页面没有发生改变。

    解决方案是通过$set方法来设置数组的值,该方法有三个参数,第一个是要被设置值的目标对象,第二个是设置值在数组中的索引,第三个是设置的值

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <style type="text/css">
                [v-cloak]{
                    display: none;
                }
            </style>
        </head>
        <body>
            <div id="app" v-cloak>
                <div v-for="item in testArr">
                    {{item}}
                </div>
                <button @click="click1">点击1</button>
                <button @click="click2">点击2</button>
            </div>
                
        </body>
        <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
        <script>
            window.vm = new Vue({    
                el:'#app',
                data:{
                    testArr : [1,2,3]
                },
                methods:{
                    click1:function(){
                        console.log("修改第一个数字,页面没有修改");
                        this.testArr[0] = this.testArr[0]+1;
                    },
                    click2:function(){
                        console.log("修改了数字,页面发生了修改");
                        vm.$set(this.testArr,0, this.testArr[0]+1);
                    }
                }
            })
        </script>
    </html>

    2. 修改对象的属性,但是页面的值没有发生改变。

    导致这种情况的原因是:在vue对象的data中没有设置对象的属性。

    解决方法:一。直接在vue的data中设置无法双向绑定的属性。

         二。使用$set来设置属性。

    解决方法一适用于在页面加载前就清楚对象包含哪些属性值。但往往有的时候,数据是通过ajax拿到的,并不清楚要绑定的属性名称,这时候更适合使用方法二。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            
            <div id="app">
                {{test1.name}}
                <br />
                <button @click="click1">点击添加属性</button>
                <button @click="click2">使用$set添加属性</button>
            </div>
                
        </body>
        <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
        <script>
            
            window.vm = new Vue({
                
                el:'#app',
                data:{
                    test1:{
                        // name : ''    解决方案一:直接初始化属性
                    }
                },
                methods:{
                    click1:function(){
                        this.test1.name = "小明";
                        console.log("属性添加失败,原因是test1的name属性没有预先初始化");
                    },
                    click2:function(){
                        // 解决方案二:使用$set来解决
                        vm.$set(this.test1,"name","小明");
                        console.log("属性添加成功");
                    }
                }
            })
        </script>
    </html>

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 08:37 , Processed in 0.057997 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表