以前在寫前端的方式,會採取 html, css, js 分離的方式。這次活動邀請 Gias 來彰化師大與同學分享 Angular.js, 也比較了解 Angular 的概念,話說,把 HTML 當做一種 interface 的概念,其實還蠻不一樣的,就說法層面上會比較能夠說得過去,不過比對以前的寫法又覺得有點開倒車。
這邊是想要提出一件事情,這邊強調要快速開發,我們以一個 list link 為例子
<ul>
<li><a href="#">click</a></li>
<li><a href="#">click</a></li>
<li><a href="#">click</a></li>
<li><a href="#">click</a></li>
</ul>
如果加入 angular 的作法就會比較像底下的方式
<ul>
<li><a href="#" ng-click="click()">click</a></li>
<li><a href="#" ng-click="click()">click</a></li>
<li><a href="#" ng-click="click()">click</a></li>
<li><a href="#" ng-click="click()">click</a></li>
</ul>
說服
當然這個模式並不是不好,只是對於一開始接觸真的會覺得是在開倒車,因為以往我們一直強調大家不要在 HTML 加入 js 程式碼,所以不建議使用 inline function, 可是現在卻發生這樣的寫法。
在 Angular 裡面,強調的是 HTML is an interface. 所以他就是一個介面,並不是文字結構,既然 HTML 是用來呈現,給予使用者點擊,接觸,使用,那把 function 加入在 HTML 裡面,似乎又變成合情合理。
效能
當然接下來有另外一個問題,就是 ng-click 這樣的方式,如果有寫過前端的朋友應該就可以發現,另外一個隱藏的問題就是 performance issue, 在 Angular 裡面,他已經做好 compiler 的動作,因此作者認為,人眼對於 50ms 以下的變動時間,是不會有真正感覺的。在 Angular 裡面, performance 的差異會是在 2000 個以上物件之後才會發生問題,所以只要你的物件可以確保不在 2000 個以上,基本上不會出現任何問題。
如果超過 2000???
如果這個事情發生,作者希望你重新思考 binding event 的方法,或者你的使用方法開始有錯誤的方向。意味著千錯萬錯,都是使用者的錯。
個人觀點
以目前最新的瀏覽器來說,加上目前電腦的效率,基本上這樣的方式是非常簡單就可以達到的目的,如 Gias 所說,Angular 是想要把瀏覽器的使用率逼到極致。不用再去管那些雞毛蒜皮的小事情,只要照著 angular 的作法執行就對了,That is angular way.
當然對於開倒車這件事情,一開始還是不太能認同,但是經過解說之後,了解他背後希望達到的事情,就會有另外一種體認,這跟程式無關,比較是精神和信仰上面的作法,就像是到寺廟裡面拿香拜神,跟著基督教吃飯前要禱告一樣,就是一種『精神信仰引導行為模式』,這種事情沒有絕對,也沒有最佳的解決方法,有的時候,程式開發人員保持一種開放的心態,保持著謙和的態度,才能夠集大成,因為我也正在持續觀看學習中。
導讀資料
- http://stackoverflow.com/questions/9682092/databinding-in-angularjs/9693933#9693933
http://stackoverflow.com/questions/9682092/databinding-in-angularjs/9693933#9693933
留言
張貼留言