了解vue中監聽數據變化

由于接觸過c#,swift等語言,對于屬性有所了解,所以像a.name = "jack"發生變化后,可以觸發其他的操作并不覺得唐突。當有一天使用vue.js的時候發現。在js中竟然也可以這樣做,簡直太方便了。數據驅動view就是這樣誕生的。

好奇心使然,還是研究了一下。這要感激ES5的訪問器屬性。get,set,跟c#中的屬性非常的像。

vue其實就是將data = {...}重新的定義了get和set。在set中使用訂閱發布來實現數據的監聽。

來個栗子:

var bind = function (obj, key, callback) {
    var v = obj[key];
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            return v;
        },
        set: function (value) {
            var old = v;
            v = value;
            callback(old, value);
        }
    })
};

var a = { name: "austin" };

bind(a, "name", function (oldname, newname) {
    alert("i'm " + newname + ", old name is " + oldname);
});

現在你只要修改a.name就會彈出一個對話框。其他的就自己想想吧。拋磚引個玉O(∩_∩)O哈哈~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 在微信小程序誕生之初,小冉就一直有關注這個有潛力的設計。當時還欣喜若狂,和老師他們連夜在群里討論了“小程序”的前前...
    一個高中生的日常閱讀 1,300評論 0 7
  • 為探望因病住進縣城醫院的哥哥,最近回了趟老家。與兩年前那次探訪相比,縣城市容發生了很大變化,到了南門醫院見到哥哥...
    涂水湯湯閱讀 481評論 0 1
  • 你看樹上那櫻花 迫不及待的要離開媽媽 踏著春雨 收拾行囊 出發了 他們追著風調皮的玩捉迷藏 不信,你看那路口的花...
    夜空中最亮的星Z閱讀 295評論 0 0
  • 自古以來,人間萬事,經歷多少風云變幻,桑田滄海,許多曾經純美的事物,都落滿了塵埃。任憑我們如何擦拭,也不可...
    0dc87d0ae62a閱讀 370評論 0 1