在巴黎舉行的ng-europe大會上,Angular團隊為與會者介紹了即將到來的AngularJS 2.0版本的細節(jié)。
新版本對1.x版本進行了重大的顛覆,當前還沒有任何遷移指南,此外它還是基于一個名為AtScript的新語言進行開發(fā)的。 對于熟悉Angular 1.X版本的開發(fā)者來說,他們將看到一個完全不同的框架,并且必須學習一種新的架構。
在一堂關于版本2.0的變更的講座中,Igor Minar 和 Tobias Bosch介紹了新的模板語法: Add 這種新語法將數(shù)據(jù)綁定到元素的屬性(property)上,而不是特性(attribute)上。這就允許你使用以下語法: 看上去類似于標準的HTML,但這個復選框元素不會暴露出checked特性。
新的模板引擎將數(shù)據(jù)綁定到元素的屬性上,即使這些屬性并非由DOM所暴露出的特性。 與新架構引起的其它劇變相比,新的模板語法只是一個相對較小的改動。
與會者之一的Michael Bromley描述了一些新版本的一些破壞性改動,版本2.0取消了1.X中的以下概念 控制器(Controller) (Directive定義對象) $scope angular.module jqLite 關于jqLite的取消,Igor是這樣說的: 在2.0中,我們不會在框架中使用任何DOM的封裝了,而是直接和原始的DOM打交道。自從我們啟動項目以來,DOM本身已經(jīng)得到了很大的改善,因此我們不再需要一個兼容層來幫助我們應付跨瀏覽器的問題了。
所以我們可以直接操作原始的DOM。不過如果你想要使用jQuery,在你的組件中應用jQuery,那也完全沒問題。
2.0版本的一個目標是改善Angular應用的開發(fā)體驗,在第2天的主題演講上,AngularJS之父Mi?ko Hevery描述了如何通過使用AtScript來實現(xiàn)這一目標。 AtScript是TypeScript的一個超集,后者是由微軟創(chuàng)建的一門語言。
TypeScript為JavaScript加入了類型,而AtScript進一步擴展了這一思想,它為類型加入了標注與動態(tài)注入。 標注允許開發(fā)者為某個類加入“表達意圖”的能力。
因此,無需通過模板代碼的方式創(chuàng)建自定義directive,開發(fā)者可以創(chuàng)建一個類,并告訴AngularJS“這是一個directive”。而動態(tài)注入的能力允許框架在運行時檢查類型信息。
不過,AtScript的使用是可選的,開發(fā)Angular 2.0應用并不一定要使用AtScript。Mi?ko說道:由于現(xiàn)在的社區(qū)和類庫都是使用純JavaScript開發(fā)的,因此不強迫AtScript的使用是非常重要的目標。
而由于AtScript可以直接編譯為EcmaScript 5(ES5),因此開發(fā)者可以直接編寫Angular 2.0。 在一次問答講座上,開發(fā)者們問道Angular 1.3還將獲得多長時間的支持。
Brad Green是這樣回答的: 比較合理的期望是,我們大約還需要1年半至2年時間以發(fā)布2.0的最終版本,這段時間內(nèi)我們還會為1.3提供缺陷修復及安全補丁。 Angular團隊還暗示他們沒有為從Angular 1.X遷移到2.0提供遷移指南,但他們也不排除這種可能。
目前還沒有確切的發(fā)布日期,不過團隊基本達成了共識,會在2015年終最終完成版本2.0。 Brad Green還表示,Angular 2.0只會支持“最新的瀏覽器”,但沒有指出確切的版本。
他說他們的團隊“在嘗試基于未來的標準進行開發(fā),而不是關注于現(xiàn)有的標準”。 開發(fā)者們對于這次重大變更的感覺可謂是五味陳雜。
Hacker News的用戶zak_mc_kracken說道: 雖然新版本依然叫做“Angular”,但它與之前的版本幾乎沒有多少相似之處,它完全是一個新的框架。一想到我對于Angular 1所掌握的全部知識都將成為過期的內(nèi)容,就禁不住感到有點兒悲傷,但我也很期待對這個新的框架進行一番研究。
如果它的革新性能夠達到Angular 1的一半,那我就會從中獲得很大的樂趣。 ng-europe大會的視頻曾被短暫地上傳到YouTube上,但很快就被刪除了。
未來的發(fā)展趨勢是前端后端只靠json數(shù)據(jù)來進行通信:后端只處理和發(fā)送一段json數(shù)據(jù)到前端,然后計算和模板渲染都在前端進行。而前端的改動后,形成json數(shù)據(jù)然后傳回到后端。未來趨勢就是:后臺程序再也不做模板的任何處理
AngularJS
的作用簡單說就是就是把后臺的json值直接用html進行渲染,然后html的操作又直接在形成json傳回后臺。
未來的后臺MVC,試圖不再是模板了,而是一段結構整齊標準的JSON,而這個JSON作為前臺的model直接在AngularJS直接使用。
或者說后臺的試圖是前臺的模型,而整個前臺就是后臺的視圖。后臺程序再也不做模板的任何處理了。
Angular是框架的一種,不學也能開發(fā)前端。學backbone或者ember也能開發(fā)前端。沒有js的mvc,就光弄個jquery,也能開發(fā)前端。
那到底要不要學?個人覺得就是要看發(fā)展趨勢。angular是否簡化的前端開發(fā),是否符合未來前端的開發(fā)趨勢。以現(xiàn)在的js的發(fā)展程度來看,angular
是符合發(fā)展趨勢的,第一,解耦前端,第二,可以模塊化,第三可測試,第四天生支持json,第五依賴注入等等等,還有一些其他特性使得angular跟隨甚至是推動了前端的開發(fā)趨勢。
所以說angular學習是有好處的:
1.了解前端的開發(fā)趨勢
2.學習MV*的設計方法
3.學習模塊化編程
4.學習如何測試模塊
5.使用angular簡化開發(fā)流程
6.隨著google的大力支持和逐漸流行,公司開始使用angular,有些崗位需要有angular的知識才能工作。
angularjs 與 jquery 等傳統(tǒng)操作 dom 的思想有所不同,
對于 jquery 等,一般是先有完整 dom 然后在這些 dom 的基礎上進行二次調教。
而 angularjs 等框架則是 根據(jù) 數(shù)據(jù)模型 以及其對應的 dom 模版,然后通過模版像搭積木那樣組合頁面。
顯然的,前者在 seo 上有天然優(yōu)勢;而后者,搜索引擎還只能拿到某個模版,而無內(nèi)容。
暫時沒想到有什么特別好的解決方案,或許,對于內(nèi)容頁,可以繼續(xù)使用傳統(tǒng)方式,而只在需要更多交互的地方應用 angularjs,特別是在移動端應用上。
同理適用于各種 前端的 mvc 框架,后端只要為前端提供數(shù)據(jù)接口,而不再需要為其拼接 html.
在巴黎舉行的ng-europe大會上,Angular團隊為與會者介紹了即將到來的AngularJS 2.0版本的細節(jié)。
新版本對1.x版本進行了重大的顛覆,當前還沒有任何遷移指南,此外它還是基于一個名為AtScript的新語言進行開發(fā)的。 對于熟悉Angular 1.X版本的開發(fā)者來說,他們將看到一個完全不同的框架,并且必須學習一種新的架構。
在一堂關于版本2.0的變更的講座中,Igor Minar 和 Tobias Bosch介紹了新的模板語法: 這種新語法將數(shù)據(jù)綁定到元素的屬性(property)上,而不是特性(attribute)上。這就允許你使用以下語法: 看上去類似于標準的HTML,但這個復選框元素不會暴露出checked特性。
新的模板引擎將數(shù)據(jù)綁定到元素的屬性上,即使這些屬性并非由DOM所暴露出的特性。 與新架構引起的其它劇變相比,新的模板語法只是一個相對較小的改動。
與會者之一的Michael Bromley描述了一些新版本的一些破壞性改動,版本2.0取消了1.X中的以下概念 控制器(Controller) (Directive定義對象) $scope angular.module jqLite 關于jqLite的取消,Igor是這樣說的: 在2.0中,我們不會在框架中使用任何DOM的封裝了,而是直接和原始的DOM打交道。自從我們啟動項目以來,DOM本身已經(jīng)得到了很大的改善,因此我們不再需要一個兼容層來幫助我們應付跨瀏覽器的問題了。
所以我們可以直接操作原始的DOM。不過如果你想要使用jQuery,在你的組件中應用jQuery,那也完全沒問題。
2.0版本的一個目標是改善Angular應用的開發(fā)體驗,在第2天的主題演講上,AngularJS之父Mi?ko Hevery描述了如何通過使用AtScript來實現(xiàn)這一目標。 AtScript是TypeScript的一個超集,后者是由微軟創(chuàng)建的一門語言。
TypeScript為JavaScript加入了類型,而AtScript進一步擴展了這一思想,它為類型加入了標注與動態(tài)注入。 標注允許開發(fā)者為某個類加入“表達意圖”的能力。
因此,無需通過模板代碼的方式創(chuàng)建自定義directive,開發(fā)者可以創(chuàng)建一個類,并告訴AngularJS“這是一個directive”。而動態(tài)注入的能力允許框架在運行時檢查類型信息。
不過,AtScript的使用是可選的,開發(fā)Angular 2.0應用并不一定要使用AtScript。Mi?ko說道:由于現(xiàn)在的社區(qū)和類庫都是使用純JavaScript開發(fā)的,因此不強迫AtScript的使用是非常重要的目標。
而由于AtScript可以直接編譯為EcmaScript 5(ES5),因此開發(fā)者可以直接編寫Angular 2.0。 在一次問答講座上,開發(fā)者們問道Angular 1.3還將獲得多長時間的支持。
Brad Green是這樣回答的: 比較合理的期望是,我們大約還需要1年半至2年時間以發(fā)布2.0的最終版本,這段時間內(nèi)我們還會為1.3提供缺陷修復及安全補丁。 Angular團隊還暗示他們沒有為從Angular 1.X遷移到2.0提供遷移指南,但他們也不排除這種可能。
目前還沒有確切的發(fā)布日期,不過團隊基本達成了共識,會在2015年終最終完成版本2.0。 Brad Green還表示,Angular 2.0只會支持“最新的瀏覽器”,但沒有指出確切的版本。
他說他們的團隊“在嘗試基于未來的標準進行開發(fā),而不是關注于現(xiàn)有的標準”。 開發(fā)者們對于這次重大變更的感覺可謂是五味陳雜。
Hacker News的用戶zak_mc_kracken說道: 雖然新版本依然叫做“Angular”,但它與之前的版本幾乎沒有多少相似之處,它完全是一個新的框架。一想到我對于Angular 1所掌握的全部知識都將成為過期的內(nèi)容,就禁不住感到有點兒悲傷,但我也很期待對這個新的框架進行一番研究。
如果它的革新性能夠達到Angular 1的一半,那我就會從中獲得很大的樂趣。 ng-europe大會的視頻曾被短暫地上傳到YouTube上,但很快就被刪除了。
實在是不能對jquery的ajax方法和基于頁面dom的各種取值、傳值方法滿意(雖然jquery已經(jīng)解救過我一次了),剛好手上這個項目用jquery的方法寫了一半,決定試試很久以前自學的angularJS,把現(xiàn)在項目中jquery得部分用angularJS重寫一遍。
寫的時候碰到很多問題,因為剛開始用,寫法思路還是和寫jquery相似,導致與在一個生成select option下拉框時花費了2個小時才最終搞定。 普通html select option, 需要該字段名稱name,選線id,選項label a b c jquery的取選項得做法 select_id = $("#data_select option:selected").val(); jqueryde的思路大概是上面這樣的,但是使用了angularJS后,著實讓我迷惑了 angularJS在select下使用ng-option 標簽生成選項實例 生成的html dom如下: x1 x2 x3 x4 。
看見這個輸出,我發(fā)現(xiàn)沒法把id寫在option > value上 這豈不是無法獲取選項信息了?這不行,萬萬不行 。結果開始了長時間的google,還是沒有解決辦法,就只能生成這種只有l(wèi)abel的option,這咋辦呢?難道要用ng-repeat生成option? {{framework_y.name}} 我甚至開始這么嘗試了,但是我的理智戰(zhàn)勝了偷懶的邪念,決定通過ng-click取model里的值看一看,結果console.log出來一看,發(fā)現(xiàn)自己一個多小時都傻x了。
看看console里的結果: Object {bubble_name: "ab", bubble_description: "b", x: Object, y: Object, series: Object} bubble_description: "b" bubble_name: "ab" series: Object x: Object y: Object date: "2014-03-11 09:03:22" description: "" disable_flag: "1" id: "9" name: "y3" position: "1" team_id: "8" type: "y" __proto__: Object __proto__: Object angularJS根據(jù)model的名稱早就把每個相關的input的值自動放在Object中了 根本不在需要什么value='id',只要把model的object從接口中取出來,放在html頁面上,、選中的option的全部數(shù)據(jù)angularJS自動就幫我取到controller中得點擊事件中去了。
run方法用于初始化全局的數(shù)據(jù),僅對全局作用域起作用。
舉個栗子吧:
<script type="text/javascript">
var m1 = angular.module('myApp',[]);
m1.run(['$rootScope',function($rootScope){
$rootScope.name = 'hello';
}]);
console.log( m1 );
</script>
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據(jù)《信息網(wǎng)絡傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:3.108秒