vue偵測(cè)數(shù)據(jù)變化

如何使用watch偵聽(tīng)數(shù)據(jù)變化魁蒜?

如何通過(guò)計(jì)算屬性computed配合watch屬性來(lái)偵聽(tīng)數(shù)據(jù)變化?

深度偵聽(tīng)與單一屬性偵聽(tīng)有什么不同瓶堕?

請(qǐng)帶著上面的疑問(wèn)看該案例败砂,該案例直接在瀏覽器的控制臺(tái)中改變vm的data屬性就可以看到對(duì)應(yīng)的效果,不多說(shuō)世落,直接運(yùn)行案例淮腾。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>監(jiān)聽(tīng)數(shù)據(jù)變化</title>
        <script type="text/javascript" src="../js/vue.js"></script>
        
    </head>
    <body>
        <div id="app"></div>
        
        <script>
             var vm = new Vue({
                el: '#app',
                data: {
                    text: "通過(guò)控制臺(tái)改變vm的屬性值觸發(fā)函數(shù)",
                    arr: [{a: "111"}, "222"],
                    obj: {
                        a: '我是字符串',
                        b: 5,
                        c: false,
                        d: [1,2],
                        e: {
                            options:[{a:1},{b:2}],
                            sel: {
                                titel: "66666"
                            }
                        }
                    },
                    obj2: {
                        name: "張三",
                        age: 18,
                        info: {
                            address: "深圳福田區(qū)",
                            phone: 13800138000,
                            email: {
                                qq: "123456@qq.com",
                                wx: "123456"
                            }
                        }
                    }
                },
                template: "<div>{{text}}</div>",
                
                /**
                 * 1.watch 可以監(jiān)聽(tīng)在data中定義的所有屬性
                 * 2.watch 可以監(jiān)聽(tīng)計(jì)算屬性中定義的所有屬性
                 */
                watch: {
                    /**
                     * 案例1:監(jiān)聽(tīng)字符串的變化
                     * text的值發(fā)生變化,該回調(diào)函數(shù)都會(huì)被執(zhí)行
                     */
                    text(newValue, oldValue) {
                        console.log("oldValue", oldValue);
                        console.log("newValue", newValue);
                    },
                    
                    /**
                     * 案例2:監(jiān)聽(tīng)數(shù)組的變化 (和案例3相同屉佳,都屬于深度監(jiān)聽(tīng))
                     * 1.arr的長(zhǎng)度發(fā)生變化時(shí)谷朝,回調(diào)函數(shù)都會(huì)被執(zhí)行
                     * 2.arr的元素的值發(fā)生變化時(shí)不會(huì)觸發(fā)回調(diào)函數(shù)
                     */
                    arr(newValue, oldValue) {
                        console.log("oldValue", oldValue);
                        console.log("newValue", newValue);
                    },
                    
                    /**
                     * 案例3 (和案例2相同,都屬于深度監(jiān)聽(tīng))
                     * 1.深度監(jiān)聽(tīng),可監(jiān)聽(tīng)對(duì)象 或 數(shù)組的變化(長(zhǎng)度),對(duì)象中的任意一個(gè)屬性發(fā)生變化都會(huì)觸發(fā)handler函數(shù)
                     * 2.obj對(duì)象下的d屬性是個(gè)數(shù)組武花,只有長(zhǎng)度發(fā)生變化時(shí)才會(huì)觸發(fā)handler函數(shù),數(shù)組元素的值發(fā)生變化不會(huì)觸發(fā)函數(shù)(如vm.obj.d[0] = 5 不會(huì)觸發(fā)handler函數(shù))
                     * 3.newValue和oldValue的值都是對(duì)象obj本身,無(wú)法知道到底是哪一個(gè)屬性發(fā)生了變化
                     * 4.vm.obj.a的值發(fā)生變法也會(huì)觸發(fā)handler函數(shù)
                     * 5.總結(jié):除了改變數(shù)組的元素的值不會(huì)觸發(fā)handler函數(shù)外(改變數(shù)組長(zhǎng)度會(huì)觸發(fā)handler函數(shù))圆凰,obj對(duì)象中的任何屬性發(fā)生變化都會(huì)觸發(fā)handler函數(shù)
                     */
                    obj: { 
                        handler(newValue, oldValue) {
                            console.log("oldValue", oldValue);
                            console.log("newValue", newValue);
                        },
                        deep: true
                    },
                    
                    /**
                     * 案例4 (和案例2、案例3相同体箕,都屬于深度監(jiān)聽(tīng))
                     * 1.info 及 info里面的任意屬性發(fā)生變化都會(huì)觸發(fā)(除數(shù)組的元素的值發(fā)生變化外)
                     */
//                  'obj2.info': {
//                      handler(newValue, oldValue) {
//                          debugger
//                          console.log("oldValue", oldValue);
//                          console.log("newValue", newValue);
//                      },
//                      deep: true
//                  },
                    
                    /**
                     * 案例5 (和案例6相同专钉,僅監(jiān)聽(tīng)當(dāng)前屬性)
                     * 1.只有info的值 或 引用發(fā)生變化時(shí)才會(huì)觸發(fā)handler函數(shù)
                     * 2.info里面的任何屬性發(fā)生變化都不會(huì)觸發(fā)handler函數(shù)
                     * 3.如果info的值是基本數(shù)據(jù)類型時(shí),值發(fā)生改變就觸發(fā)handler函數(shù)
                     * 4.如果info的值是引用類型數(shù)據(jù)時(shí)累铅,引用發(fā)生改變就觸發(fā)handler函數(shù)
                     * 5.總結(jié):當(dāng)deep設(shè)置為false時(shí)跃须,只有info發(fā)生改變時(shí)才會(huì)觸發(fā)handler函數(shù)(不包含子屬性,值針對(duì)info)
                     */
                    'obj2.info': {
                        handler(newValue, oldValue) {
                            debugger
                            console.log("oldValue", oldValue);
                            console.log("newValue", newValue);
                        },
                        deep: false
                    },
                    
                    /**
                     * 案例6 (和案例5相同娃兽,僅監(jiān)聽(tīng)當(dāng)前屬性)
                     * 配合計(jì)算屬性computed來(lái)實(shí)現(xiàn)單一屬性的偵聽(tīng)(推薦)
                     * 注意:先在computed中返回要監(jiān)聽(tīng)的值
                     */
                    onlyProperty(newValue, oldValue) {
                        debugger
                        console.log("oldValue", oldValue);
                        console.log("newValue", newValue);
                    },

                    /**
                     *  監(jiān)聽(tīng)對(duì)象中不存在的屬性不會(huì)報(bào)錯(cuò)菇民,但也不會(huì)被觸發(fā)
                     */
                    'obj2.node': {
                        handler(newValue, oldValue) {
                            console.log("oldValue", oldValue);
                            console.log("newValue", newValue);
                        }
                    }
                    
                },
                computed: {
                    onlyProperty() {
                        return this.obj.e;
                    }
                }
             });
        </script>
    </body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市投储,隨后出現(xiàn)的幾起案子第练,更是在濱河造成了極大的恐慌,老刑警劉巖轻要,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件复旬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡冲泥,警方通過(guò)查閱死者的電腦和手機(jī)驹碍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凡恍,“玉大人志秃,你說(shuō)我怎么就攤上這事〗涝停” “怎么了浮还?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闽巩。 經(jīng)常有香客問(wèn)我钧舌,道長(zhǎng)担汤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任洼冻,我火速辦了婚禮崭歧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撞牢。我一直安慰自己率碾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布屋彪。 她就那樣靜靜地躺著所宰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜挥。 梳的紋絲不亂的頭發(fā)上仔粥,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音砰嘁,去河邊找鬼件炉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矮湘,可吹牛的內(nèi)容都是我干的斟冕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缅阳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼磕蛇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起十办,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秀撇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后向族,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呵燕,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年件相,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了再扭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夜矗,死狀恐怖泛范,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情紊撕,我是刑警寧澤罢荡,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響区赵,放射性物質(zhì)發(fā)生泄漏惭缰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一笼才、第九天 我趴在偏房一處隱蔽的房頂上張望从媚。 院中可真熱鬧,春花似錦患整、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至到千,卻和暖如春昌渤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憔四。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工膀息, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人了赵。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓潜支,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親柿汛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冗酿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容