账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    VUE监听数组新旧值不变化,请教前辈原因?
    42
    0

    最近在自学vue对于watch监测这块还有点疑问,请教前辈帮忙解答。

    具体问题如下:
    测试监测不同类型data数据的新旧值,在有数组的情况下,watch监测到了数组的变化但是没监测到变化前的旧值。
    在官网也查了文档,问题应该是出在下面这里,无奈对于官网文档给出的解决方法看不懂,求各位大神给与指点!!!

                    g: {
                        handler: function (val, oldVal) {
                            console.log("newG:" + val, 'oldG:' + oldVal);
                        }
                    }

    当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
    当你修改数组的长度时,例如:vm.items.length = newLength

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>watch</title>
        <script src="https://cdn.jsdelivr.net/npm/vue "></script>
    </head>
    
    <body>
        <fieldset>
            <legend>实例1</legend>
            <div id="app">
                <span>A:</span>
                <input type="text" v-model:value="a" />
                <span>B:</span>
                <input type="text" v-model:value="b" />
                <div>
                    <span>Cname:</span>
                    <input type="text" v-model:value="c.name">
                </div>
                <div>
                    <span>Dname:</span>
                    <input type="text" v-model:value="d.e.f.age">
                </div>
                <div>
                    <span>arry:</span>
                    <input type="text" v-model:value="g[0]">
                </div>
            </div>
        </fieldset>
        <script> 
            new Vue({
                el: '#app',
                data: {
                    a: '',
                    b: '',
                    c: {
                        name: ''
                    },
                    d: {
                        e: {
                            f: {
                                nage: ''
                            }
                        }
                    },
                    g: []
                },
                watch: {
                    //普通watch监听
                    a: function (val, oldVal) {
                        console.log("newA:" + val, 'oldA:' + oldVal);
                    },
                    //通过方法名在methods内监听
                    b: 'anothermethod',
                    //对象深度监听
                    c: {
                        handler: function (val, oldVal) {
                            console.log('newname:' + val, 'oldname:' + oldVal);
                        },
                        deep: true,
                        immediate: true
                    },
                    'c.name': {
                        handler: function (val, oldVal) {
                            console.log('newC:' + val, 'oldC:' + oldVal);
                        }
                    },
                    'd.e.f.age': {
                        handler: function (val, oldVal) {
                            console.log('newD:' + val, 'oldD:' + oldVal);
                        }
                    },
                    g: {
                        handler: function (val, oldVal) {
                            console.log("newG:" + val, 'oldG:' + oldVal);
                        }
                    }
                },
                methods: {
                    anothermethod: function (val, oldVal) {
                        console.log("newB:" + val, 'oldB:' + oldVal);
                    }
                }
            })
    
    
        </script>
    </body>
    
    </html>
    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部