如果說(shuō) AngularJS 比 jQuery 強(qiáng)大,強(qiáng)大在哪?
認(rèn)證高級(jí)PHP講師
以上回到顯然不合理,可能是沒有用過(guò)ng,ng比jq強(qiáng)大的地方主要是:
jquery修改元素是通過(guò)手工操作dom,ng修改了數(shù)據(jù)就自動(dòng)同步到dom
比如有一個(gè)列表要展現(xiàn):
<ul ng-repeat="i in list"><li>{{i}}</li></ul>
ng代碼:$scope.list = [1,2,3],
修改list $scope.list[2] = 4
dom的ul第3個(gè)li就自動(dòng)變成4了
而jq,代碼大概需要:
list[2] = 4
$('ul').html('')
$.each(list, function(i,v){ $('ul').append('....') })
說(shuō)白了就是ng執(zhí)行要把數(shù)據(jù)修改了html就自動(dòng)變了,jq的話修改數(shù)據(jù)了還需要自己修改html
而且,ng中,html(比如表單的input的value)變了后,數(shù)據(jù)自動(dòng)變了,而jq還需要var data = $('input').val();
這叫數(shù)據(jù)的雙向綁定。
當(dāng)然ng只適合單頁(yè)應(yīng)用,不利于seo,這是另外的事
首先這兩者可比較性不大,jquery的側(cè)重點(diǎn)在于提供了多樣的元素選擇以及選出元素的各類方法提供,幫助開發(fā)者快速進(jìn)行頁(yè)面開發(fā)。但從本質(zhì)上來(lái)說(shuō),并不是程序框架性質(zhì)的框架。而且,選擇器角度也可以很多直接用原生去實(shí)現(xiàn),而angular更在于其數(shù)據(jù)和頁(yè)面的自動(dòng)綁定所能帶來(lái)的開發(fā)便利,更符合頁(yè)面相對(duì)交互不多,更多中心在于數(shù)據(jù)呈現(xiàn)的場(chǎng)景下使用。
所以lz要比較其實(shí)應(yīng)該比較的是backbone和angular這兩個(gè)。
我之前花很長(zhǎng)時(shí)間寫的一個(gè) Markdown 編輯器中的大部分代碼,其實(shí)只是實(shí)現(xiàn)了 AngularJS 的一點(diǎn)皮毛;而 jQuery 的很多功能我都很快地自己寫了實(shí)現(xiàn)。
讀過(guò) jQuery 核心的代碼,感覺 jQuery 提供的是一種書寫風(fēng)格,而 AngularJS 才是真正強(qiáng)大的難以自己實(shí)現(xiàn)的,JS 所缺少的一角,打開了一種全新的思路。
當(dāng)然,jQuery 和 AngularJS 專注的地方本就不一樣,在各自領(lǐng)域都有各自的應(yīng)用。
只是論自己實(shí)現(xiàn)的難度,AngularJS 大于 jQuery。
jQuery 關(guān)注代碼,AngularJS 關(guān)注架構(gòu)和功能。
Reference: http://damoqiongqiu.iteye.com/blog/1926475 https://angularjs.org/
http://jquery.com/
從功能上來(lái)說(shuō)這兩個(gè)東西根本沒有可比性。
如果從整個(gè)代碼的寫法上來(lái)看,我感覺jquery寫的更優(yōu)美。但其實(shí)這個(gè)沒有絕對(duì),畢竟每個(gè)人都不同。
真的是沒有可比性,jQuery只是一個(gè)操作DOM的類庫(kù)而已,而AngularJS是是MVC(或者M(jìn)VVM)框架。
AngularJS實(shí)現(xiàn)了讓View和數(shù)據(jù)完全分離,提供的數(shù)據(jù)雙向綁定功能只要修改數(shù)據(jù)就時(shí)時(shí)同步了View,基本不用手動(dòng)操作DOM。
當(dāng)然AngularJS除了數(shù)據(jù)雙向綁定功能外,還提供了 路由、服務(wù)、過(guò)濾器、模板、指令、模塊管理、依賴注入、單元測(cè)試等功能。
不知道這樣說(shuō)了以后你是否有個(gè)直觀的了解2者之間的區(qū)別了。
這個(gè)問(wèn)題好比在問(wèn)錘子比螺絲刀強(qiáng)嗎,強(qiáng)大在哪里?
不同的理念,誰(shuí)也代替不了誰(shuí),真的談不上誰(shuí)更強(qiáng)大,看需求選擇使用哪個(gè),都是很好用的工具。
有人拿jqueryui和angularjs比較,覺得好傻
Angular是整體開發(fā)的框架模式,不管是什么樣的框架在具體實(shí)現(xiàn)時(shí)需要有利的工具輔助實(shí)現(xiàn),而此時(shí)jquery發(fā)揮巨大的工具作用,是一把非常好用的瑞士軍刀,哈哈,所以也叫鋒利的jquery,Angular是框架和jquery負(fù)責(zé)不同層面的工作,Angular的數(shù)據(jù)DOM的雙向綁定比較弱,當(dāng)然,也有很多人認(rèn)為這很強(qiáng)大,因?yàn)檫@特性在弱結(jié)構(gòu)弱交互頁(yè)面中確實(shí)很便利,在復(fù)雜的結(jié)構(gòu)強(qiáng)交互的頁(yè)面中,Angular的這個(gè)綁定特性的優(yōu)勢(shì)也立刻成了沒什么用的雞肋。這兩者沒有任何沖突,以我的工作來(lái)比方,把Angular理解為房屋的建筑結(jié)構(gòu)有框架結(jié)構(gòu) 框剪結(jié)構(gòu) 有磚混結(jié)構(gòu),把jquery理解為房屋的裝修樣式,有歐式,現(xiàn)代,東南亞風(fēng)格,現(xiàn)在明白了吧,兩者是獨(dú)立的不存在沖突更不存在有什么選擇的比較。
一個(gè)是MVC框架,一個(gè)是庫(kù)。一個(gè)外在的體現(xiàn)了設(shè)計(jì)思想,一個(gè)簡(jiǎn)化并強(qiáng)化了原生的js。我們也可以用jq實(shí)現(xiàn)自己的框架。所以沒有可比性。
AngularJS很成功地在團(tuán)隊(duì)成員JS能力不足的情況下,
讓Java開發(fā)人員把這部分較好地寫起來(lái)了。
好的前端程序員,會(huì)盡可能的把前后端數(shù)據(jù)交互操作進(jìn)行分離,前端程序員只需要 每個(gè)頁(yè)面 提供 一鍵傻瓜式j(luò)s 方法,后端只需按照數(shù)據(jù)模版返回固定格式數(shù)據(jù)后調(diào)用即可 ( )
js 能力不足 ,以及對(duì) dom 操作不熟練的程序員 ,則需要AngularJS 這種效率低下 ,貌似易用的框架
所以說(shuō)白了,AngularJS 是給js 能力不足,嚴(yán)重依賴框架的 java程序員用的蹩腳方案
AngularJS 是一個(gè)重量級(jí)的前端框架 ,也就是說(shuō)很吃性能,適合對(duì)頁(yè)面性能交互要求不高的地方;
總結(jié):不懂前端的程序員,總想把后端思想帶進(jìn) 前端, 前后不分,AngularJS 是提供給前端技術(shù)思想不好的程序員的妥協(xié)方案
比較就比較,有什么愚蠢不愚蠢的,太多維度可以做比較了,多少程序員從熟悉jQuery到新學(xué)習(xí)angular,這個(gè)過(guò)程必然經(jīng)歷兩者的比較。本身就是很多趨勢(shì),越來(lái)越多人用angular替代了jquery,也許就能說(shuō)明誰(shuí)強(qiáng)大,雖然我更喜歡jQuery。