摘要:把自己對這設計模式的理解整理并記錄,僅作自己以后查詢之用。是將視圖和數據分離之后,通過將數據和視圖進行綁定。一般是指模板,例如或者的字符串模板寫法如下然后通過插入中對于便是,是此指定的。
把自己對這MVVM設計模式的理解整理并記錄,僅作自己以后查詢之用。
先說前端為什么需要 MVVM 或者 FLUX。在我看來,是為了保證不那么優秀的前端er在團隊中寫出不那么垃圾的代碼,即使確實十分垃圾,也不會污染到團隊中其他同事的代碼,其它的設計模式應該也具有這種作用。
通過代碼對比理解MVVMMVVM 是 Model-View-ViewModel (雙向數據綁定)的簡寫。不管是 MVVM 或者是 FLUX, 都強調的是視圖和數據的分離。MVVM 是將視圖和數據分離之后,通過 ViewModel 將數據和視圖進行綁定。
View 一般是指模板,例如 Handlerbars ,或者 ES6 的字符串模板,寫法如下:
let message = "hello,world!!" let demo = ``${message}
然后通過 jQuery 插入 body 中
$("body").html(demo)
對于 demo 便是 View,message 是此 View 指定的 Model。由于在這個例子中并沒有交互,僅僅只是為了說明視圖和模型, 所以并沒有 VM 部分。
下面的例子是一個完整的用 JQuery 實現的 MVVM 模式寫法
//------ Model let model = { value: 1, fns: [], set: function(v) { this.value = v this.fns.forEach(fn => fn.call(this, this.value)) }, on: function(fn) { this.fns.push(fn) } }; //------ View let demo = `` $("body").html(demo) //------ ViewModel $("input").on("keyup", function() { model.set($(this).val()|0) }) $("button#button1").on("click", function() { model.set(model.value + 1) }) model.on(function(value) { $("p").html(value) $("input").val(value) })${model.value}
在這個例子中, input輸入的內容會實時顯示在p標簽中,而button被點擊之后,也會對p標簽的值和input標簽的值都做+1處理;如果我們按照通常的 jQuery 來處理的話應該怎么做?
$("input").on("keyup", function() { let value = $(this).val()|0; $("p").html(value) $("input").val(value) }) $("button").on("click", function() { let value = $("input").val()|0 + 1; $("p").html(value) $("input").val(value) })
從這兩段代碼來看,并沒有太大區別,甚至下面一段代碼看起來更短。然而下面一段代碼將 視圖和模型的處理寫到了一起,試想一下,當我們想再增加一個 -1 的button 呢?對于 MVVM的模式,只要再寫
$("button#button2").on("click", function() { model.set(model.value - 1) })
即可。
而對于傳統的方式,還需要先取得當前input值或p的值,然后再進行-1操作,最后還需要將input和p的innerHTML都修改一次。
隨著DOM的增加,處理難度的差距越來越大,越來越不容易理解,修改一次,如履薄冰。
通過這個小例子可以看出 MVVM 相對傳統的寫法的最大的優勢:
視圖和模型的分離,視圖可以獨立模型進行開發;只需約定模型的結構即可。
雙向數據綁定,視圖和模型可以通過VM互相改變。
基于約定俗成的模式,可以將爛代碼控制在最小范圍內,也很難寫出爛代碼。
ps: 按照我的理解 Angular 中對于基礎的VM進行了封裝,所以在模板中綁定數據之后,數據更新,會自動更新視圖。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85937.html
摘要:插件開發前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內優雅的實現文件分片斷點續傳。 Vue.js 插件開發 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....
摘要:一般來說,聲明式編程關注于發生了啥,而命令式則同時關注與咋發生的。聲明式編程可以較好地解決這個問題,剛才提到的比較麻煩的元素選擇這個動作可以交托給框架或者庫區處理,這樣就能讓開發者專注于發生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無敵的下半部分,在...
摘要:是文檔的一種表示結構。這些任務大部分都是基于它。這個實踐的重點是把你在前端練級攻略第部分中學到的一些東西和結合起來。一旦你進入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進行操作。它是在前端系統像今天這樣復雜之前編寫的。 本文是 前端練級攻略 第二部分,第一部分請看下面: 前端練級攻略(第一部分) 在第二部分,我們將重點學習 JavaScript 作為一種獨立的語言,如...
摘要:前言月份開始出沒社區,現在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了一般來說,差不多到了轉正的時候,會進行總結或者分享會議那么今天我就把看過的一些學習資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區,現在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了!一般來說,差不多到了轉正的時候,會進行總結或者分享會議!那么今天我就...
閱讀 3316·2021-11-16 11:45
閱讀 4387·2021-09-22 15:38
閱讀 2841·2021-09-22 15:26
閱讀 3347·2021-09-01 10:48
閱讀 827·2019-08-30 15:56
閱讀 715·2019-08-29 13:58
閱讀 1487·2019-08-28 18:00
閱讀 2160·2019-08-27 10:53