溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Vue如何監(jiān)視數(shù)據(jù)

發(fā)布時間:2022-02-25 09:20:34 來源:億速云 閱讀:135 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“Vue如何監(jiān)視數(shù)據(jù)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Vue如何監(jiān)視數(shù)據(jù)”這篇文章吧。

    1. Vue監(jiān)視數(shù)據(jù)的原理(set方法)

    1.1 Vue監(jiān)視不同類型數(shù)據(jù)的原理

    特點:vue會監(jiān)視data中所有層級的數(shù)據(jù),并且如果他檢測到是對象那么就會給對象里面所有的屬性配置getter和setter函數(shù)

    1.1.1 如何監(jiān)測對象中的數(shù)據(jù)?

    通過setter實現(xiàn)監(jiān)視,且要在new Vue時就傳入要監(jiān)測的數(shù)據(jù)

    (1).對象中后追加的屬性,Vue默認不做響應(yīng)式處理(就是沒有配置getter和setter函數(shù))

    (2).如需給后添加的屬性做響應(yīng)式,請使用如下API:

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

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

    1.1.2 如何監(jiān)測數(shù)組中的數(shù)據(jù)?

    通過包裹數(shù)組更新元素的方法實現(xiàn),本質(zhì)就是做了兩件事:

    		(1). 調(diào)用原生對應(yīng)的方法對數(shù)組進行更新。
    
    		(2). 重新解析模板,進而更新頁面。

    在Vue修改數(shù)組中的某個元素一定要用如下方法:

    (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">在結(jié)尾添加一個人的信息</button>
        </div>
    
        <script>
            Vue.config.productionTip = false
            let vm = new Vue({
                el: '#root',
                data: {
                    person: [
                        { id: "001", name: "馬冬梅", age: 20, gender: "女" },
                        { id: "002", name: "夏洛特", age: 33, gender: "男" },
                        { id: "003", name: "沈騰", age: 50, gender: "男" },
                        { id: "004", name: "賈玲", age: 45, gender: "女" },
                    ]
                },
                methods: {
                    updatep() {            
                        // 但是下面方法不奏效,此方法Vue檢測不到,
                        // 原因是因為數(shù)組上面沒有g(shù)etter和setter方法所以檢測不到數(shù)據(jù)發(fā)生改變
                        // this.person[0] = {id:"001",name:"李煥英",age:66,gender:"女"}
    
                        // 下面方法奏效,是因為屬性上面已經(jīng)配置了getter和setter方法
                        // this.person[0].name = "李煥英"
                        // this.person[0].age = "66"
                        // this.person[0].gender = "女"
    
                        //  this.person.splice(0, 1, { id: "001", name: "李煥英", age: 66, gender: "女" }) 
    
                        this.$set(this.person, 0, { id: "001", name: "李煥英", age: 66, gender: "女" })
                    },
                    addNew() {
                        this.person.push({id: "005", name: "老妹啊", age: 99, gender: "女"})
                    }
                },
    
            })
        </script>
    1.1.4 set()小案例
    <div id="root">
            <h3>學(xué)生信息</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>聯(lián)系方式:{{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",
                        age: 18,
                        address: "北京",
                        contact: "13xxxxxxx56",
                        friends: [
                            { name: 'Mark', age: 12 },
                            { name: 'Lisa', age: 52 },
                            { name: 'Guli', age: 25 },
                        ]
                    }
                },
                methods: {
                    add() {
                    兩種寫法都可以
                        // this.$set(vm.student,"sex","男")
                        Vue.set(this.student,"sex","男")
                    }
                },
            })
        </script>

    以上是“Vue如何監(jiān)視數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    vue
    AI