温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue如何监视数据

发布时间:2022-02-25 09:20:34 阅读:162 作者:小新 栏目:开发技术
Vue开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要为大家展示了“Vue如何监视数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何监视数据”这篇文章吧。

    1. Vue监视数据的原理(set方法)

    1.1 Vue监视不同类型数据的原理

    特点:vue会监视data中所有层级的数据,并且如果他检测到是对象那么就会给对象里面所有的属性配置getter和setter函数

    1.1.1 如何监测对象中的数据?

    通过setter实现监视,且要在new Vue时就传入要监测的数据

    (1).对象中后追加的属性,Vue默认不做响应式处理(就是没有配置getter和setter函数)

    (2).如需给后添加的属性做响应式,请使用如下API:

     Vue.set(target,propertyName/index,value) 

     vm.$set(target,propertyName/index,value)

    1.1.2 如何监测数组中的数据?

    通过包裹数组更新元素的方法实现,本质就是做了两件事:

    		(1). 调用原生对应的方法对数组进行更新。
    
    		(2). 重新解析模板,进而更新页面。

    在Vue修改数组中的某个元素一定要用如下方法:

    (1). 使用这些API:push()pop()shift()unshift()splice()sort()reverse()

    (2). Vue.set() 或 vm.$set()

    1.1.3 小案例
     <div id="root">
            <h3>人员信息</h3>
            <button @click="updatep">点击更新马东梅的信息</button>
            <ul>
                <li v-for='p in person' :key="p.id">
                    {{p.name}} -- {{p.age}} -- {{p.gender}}
                </li>
            </ul>
            <button @click="addNew">在结尾添加一个人的信息</button>
        </div>
    
        <script>
            Vue.config.productionTip = false
            let vm = new Vue({
                el'#root',
                data: {
                    person: [
                        { id"001", name"马冬梅", age20, gender"女" },
                        { id"002", name"夏洛特", age33, gender"男" },
                        { id"003", name"沈腾", age50, gender"男" },
                        { id"004", name"贾玲", age45, gender"女" },
                    ]
                },
                methods: {
                    updatep() {            
                        // 但是下面方法不奏效,此方法Vue检测不到,
                        // 原因是因为数组上面没有getter和setter方法所以检测不到数据发生改变
                        // this.person[0] = {id:"001",name:"李焕英",age:66,gender:"女"}
    
                        // 下面方法奏效,是因为属性上面已经配置了getter和setter方法
                        // this.person[0].name = "李焕英"
                        // this.person[0].age = "66"
                        // this.person[0].gender = "女"
    
                        //  this.person.splice(01, { id"001", name"李焕英", age66, gender"女" }) 
    
                        this.$set(this.person, 0, { id"001", name"李焕英", age66, gender"女" })
                    },
                    addNew() {
                        this.person.push({id"005", name"老妹啊", age99, gender"女"})
                    }
                },
    
            })
        </script>
    1.1.4 set()小案例
    <div id="root">
            <h3>学生信息</h3>
            <p>姓名:{{student.name}}</p>
    
            <!-- 
                一个很重要的点:如果是查找对象中不存在的属性,返回的是一个undefined
                不管v-show或者是v-if,如果等到undefined的就不显示
             -->
            <p v-show="student.sex">性别:{{student.sex}}</p>
            <p>年龄:{{student.age}}</p>
            <p>地址:{{student.address}}</p>
            <p>联系方式:{{student.contact}}</p>
            朋友:<p v-for="(v,index) in student.friends" :key="index">{{v.name}} -- {{v.age}}</p>
            <button @click="add">点击添加性别</button>
        </div>
    
        <script>
            Vue.config.productionTip = false
            let vm = new Vue({
                el'#root',
                data: {
                    student: {
                        name"Jack",
                        age18,
                        address"北京",
                        contact"13xxxxxxx56",
                        friends: [
                            { name'Mark'age12 },
                            { name'Lisa'age52 },
                            { name'Guli'age25 },
                        ]
                    }
                },
                methods: {
                    add() {
                    两种写法都可以
                        // this.$set(vm.student,"sex","男")
                        Vue.set(this.student,"sex","男")
                    }
                },
            })
        </script>

    以上是“Vue如何监视数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

    亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    vue
    AI

    开发者交流群×