亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

AngularJS快速入門

2024-05-06 16:18:11
字體:
來源:轉載
供稿:網友

本文通過幾個循序漸進的例子,給大家詳細講解了如何快速入門AngularJS,十分的實用,這里推薦給大家,有需要的小伙伴可以參考下。

怎么樣快速了解AngularJS?

相信很多初學者都有過或者類似的疑問,其實這個問題沒有標準的答案,每個人的技術背景、工作經驗等等都不經相同,所以學習AngularJS的切入點肯定也就不同,我之前初略使用過knockoutjs,當我第一眼看到AngularJS的Helloworld案例后,頓時就被聲明式的語法和強大的雙向綁定特性所吸引。

其實AngularJS的官方網站首頁的幾個例子已經很好的展示了AngularJS的一些特性,下面我就從幾個例子一步一步的講解AngularJS吸引人的東西并且實際項目中是怎么使用ng的。

首先還是從第一個經典的Hello world 案例說起,如下HTML(如果你在墻外,可以直接訪問https://angularjs.org,右邊就有運行效果)。

 

 
  1. <!doctype html> 
  2. <html ng-app> 
  3. <head> 
  4. <script src="http://ngnice.com/lib/angular/1.2.16/angular.js"></script></script> 
  5. </head> 
  6. <body> 
  7. <div> 
  8. <label>Name:</label> 
  9. <input type="text" ng-model="yourName" placeholder="Enter a name here"
  10. <hr> 
  11. <h1>Hello {{yourName}}!</h1> 
  12. </div> 
  13. </body> 
  14. </html> 

會一點HTML的人都知道,這個界面有個input輸入框,下面有個

的標題,內容是 Hello {{yourName}}!。

 

實現的效果是:當用戶在input輸入框輸入內容時,下面的h1標題內部實時顯示 ”Hello 輸入的內容!"

與普通的HTML不同之處有以下幾點:

html標簽上加了一個 ng-app屬性,意思是整個HTML都屬于AngularJS控制;

input輸入框加了一個 ng-model="yourName",這樣就表明input的value與內存中的變量yourName是雙向綁定的,在輸入框輸入”world“,內存中的yourName變量就變成了”world“,反之亦然;

h1標簽內部有個{{yourName}},這個表示內存中的yourName屬性和h1節點的內容實現了雙向綁定,yourName為”world“后,h1的內容就會變成”Hello world!“,"{{}}"是ng的表達式。

傳統的做法:

在input上添加change事件,當觸發change事件后,獲取input輸入框的內容,再組合字符串,通過DOM操作修改h1的innerHTML,前提可能要給 input和h1加上id或者name屬性。

通過這個例子.

大家應該能夠很明顯的感覺到AngularJS的優勢了,不用寫一行JS代碼,就能實現一個很完美的功能。

上面的例子只是展示了一個簡單的雙向綁定功能,AngularJS既然是一個MV*框架,上面說的yourName是Model,HTML是View,那么*(Controller或者ViewModel)去哪了?我稍微修改下上面的例子:

 

 
  1. <!doctype html> 
  2. <html ng-app> 
  3. <head> 
  4. <script src="http://ngnice.com/lib/angular/1.2.16/angular.js"></script> 
  5. </head> 
  6. <body> 
  7. <div ng-controller="testCtrl"
  8. <label>Name:</label> 
  9. <input type="text" ng-model="yourName" placeholder="Enter a name here"
  10. <button ng-click="clearInputValue()">Clear Input Value</button> 
  11. <hr> 
  12. <h1>Hello {{yourName}}!</h1> 
  13.  
  14. </div> 
  15. <script> 
  16. function testCtrl($scope) { 
  17. $scope.yourName = "world"
  18. $scope.clearInputValue = function () { 
  19. $scope.yourName = ""
  20. </script> 
  21. </body> 
  22. </html> 

可以看到我修改的地方:

在div上加了一個ng-controller="testCtrl",表示這個DIV內部所有元素都屬于testCtrl管轄;

同時script加了一個函數testCtrl,這個函數有個$scope的參數,并且函數內給$scope.yourName賦了一個”world“的值,而且還有個clearInputValue函數,這個$scope大家可以理解為ViewModel,ng Model的載體(或者說上下文),所有模板中使用的ng變量都在$scope上,初始化給$scope.yourName賦值說明input輸入框的Value默認就為”world“;

界面上多了一個Button,button上有個ng-click="clearInputValue()",ng-click表示給這個Button綁定了一個click事件,點擊Button執行clearInputValue函數,這個函數給$scope.yourName賦值了空字符串,清空了輸入框的值。

從這個例子中大家可以清楚的看到AngularJS是怎么樣實現MV*的,具體傳統的做法大家可以自行在腦海中想想,ng的實現方式是不是更加的簡單,至此你有沒有被ng所吸引???

大家看了上面的例子后,或許有些人就開始疑問了,每個controller綁定一個函數,這個函數的第一個參數是$scope,所有的數據和方法都在$scope上下文里面,而且這個函數是全局函數,如果界面上有很多controller呢?不會有很多個全局函數吧?(注意:這種全局函數的方式在1.3.x版本后已經被取消了)

哈哈,其實ng早就想到了這一步,ng有自己的一套模塊加載機制,而且還引入了依賴注入。

我再次修改了上面的例子:

 

 
  1. <!doctype html> 
  2. <html ng-app="app"
  3. <head> 
  4. <meta charset="utf-8"/> 
  5. <style> 
  6. ul { 
  7. list-style : none; 
  8. clear : both; 
  9. ul > li { 
  10. list-style : none; 
  11. float : left; 
  12. margin-left : 15px; 
  13. display : block; 
  14. .active { 
  15. background : #1f292e; 
  16. color : #FFFFFF; 
  17. a { 
  18. color : #000066; 
  19. .active > a { 
  20. color : #FFFFFF; 
  21. [ng//:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng//:form{display:block;}.ng-animate-start{border-spacing:1px 1px;-ms-zoom:1.0001;}.ng-animate-active{border-spacing:0px 0px;-ms-zoom:1;} 
  22. </style> 
  23. </head> 
  24. <body ng-cloak> 
  25. <div ng-controller="testCtrl"
  26. <ul> 
  27. <li ng-class="{'active':currentMenu == 'menu1'}"><a href="javascript:;" ng-click="selectMenu('menu1')">菜單1</a> 
  28. </li> 
  29. <li ng-class="{'active':currentMenu == 'menu2'}"><a href="javascript:;" ng-click="selectMenu('menu2')">菜單2</a> 
  30. </li> 
  31. </ul> 
  32. <br><br> 
  33.  
  34. <div ng-if="currentMenu == 'menu1'"
  35. 我是菜單1里面的內容 
  36. </div> 
  37. <div ng-if="currentMenu == 'menu2'"
  38. 我是菜單2里面的內容 
  39. </div> 
  40.  
  41. </div> 
  42. <script src="http://ngnice.com/lib/angular/1.2.16/angular.js"></script> 
  43. <script> 
  44. angular.module("app", []); 
  45. angular.module("app").controller("testCtrl", ["$scope"function ($scope) { 
  46. $scope.currentMenu = "menu1"
  47. $scope.selectMenu = function (menu) { 
  48. $scope.currentMenu = menu; 
  49. }]); 
  50. </script> 
  51. </body> 
  52. </html> 

我給ng-app指定了一個名稱叫”app“,同時js代碼使用angular.module("app", []);定義了一個名稱為”app“的module,同時用這個app module 的controller方法定義了一個testCtrl;定義module函數是angular對象上的靜態方法,第一個參數傳名稱,第二個參數是一個數組,這個數組表示這個module所引用的其他module,在這個例子中我們沒有使用任何其他的module,所以傳入一個空的數組,如果第二個參數不傳,表示獲取名稱為”app“的module;

這個例子是大家在項目中經常遇見的菜單模塊,頁面共有2個菜單,默認選中菜單1,當選擇哪個菜單,下面的內容區域就顯示選中菜單的內容,同時菜單的樣式需要修改為選中狀態;

關于顯示哪個內容區域我使用了ng-if="currentMenu == 'menu1'"和ng-if="currentMenu == 'menu2'",顧名思義,ng-if意思是如果表達式為真編譯并且顯示ng-if內部的模板元素,如果為假,不顯示任何內容;

至于選中菜單的樣式,我使用了ng-class="{'active':currentMenu == 'menu1'}",意思就是currentMenu 為menu1時添加class ”active“,否則沒有任何樣式。

上面的3個例子,很好的展示了如何開啟一個ng的web,并且如何模塊化的使用ng,如果你都看懂了,說明你已經掌握了如何使用ng-controller、數據的雙向綁定,寫模板,并且初步接觸了很多內置的指令(如:ng-app,ng-controller,ng-model,ng-if,ng-class,ng-click)。

說實話,你已經會了很多了。

當然ng還是有很多東西等你慢慢發覺,如:

用ngRoute模塊寫SPA(單頁程序);

還有更多豐富的指令,學會自己封裝自定義指令;

ng的過濾器功能(Filter);

ng的表單驗證功能;

使用ng的服務功能(service、provider和factory);

ng scope樹形結構,并且在不同控制器之間通過事件發布訂閱機制通信;

$http和$resource模塊與服務端API進行交互操作;

使用animate模塊做一些動畫特效;

單元測試。

說明:上面的例子為了展示方便,所有的js css 都寫在了html頁面里面,實際項目中應該分開寫在獨立的文件中。

最后的例子

大家可以根據上面學到的知識,自己做個todolist的例子,默認界面上有2個todo,一個完成一個未完成,每個todo前面有個checkbox表示是否已完成,下面有個輸入框和添加按鈕,輸入內容點擊添加則列表上會多一個todo。大家可以先不用看下面的代碼,自己嘗試做一下,這個例子需要用到的幾個directive:

  • 表示循環todos列表,在li標簽內部就可以寫模板語言顯示每個todo的內容,如{{toodo.text}} 。

     

    代碼如下:

     

     
    1. <!DOCTYPE html> 
    2. <html ng-app="todoApp"
    3. <head lang="en"
    4. <meta charset="UTF-8"
    5. <title></title> 
    6. <style> 
    7. .done-true { 
    8. text-decoration: line-through; 
    9. color: grey; 
    10. </style> 
    11. </head> 
    12. <body> 
    13. <h2>Todo</h2> 
    14. <div ng-controller="TodoController"
    15. <span>{{remaining()}} of {{todos.length}} remaining</span> 
    16. [ <a href="" ng-click="archive()">archive</a> ] 
    17. <ul class="unstyled"
    18. <li ng-repeat="todo in todos"
    19. <input type="checkbox" ng-model="todo.done"
    20. <span class="done-{{todo.done}}">{{todo.text}}</span> 
    21. </li> 
    22. </ul> 
    23. <form ng-submit="addTodo()"
    24. <input type="text" ng-model="todoText" size="30" 
    25. placeholder="add new todo here"
    26. <input class="btn-primary" type="submit" value="add"
    27. </form> 
    28. </div> 
    29. <script src="http://ngnice.com/lib/angular/1.2.16/angular.js"></script> 
    30. <script> 
    31. angular.module('todoApp', []) 
    32. .controller('TodoController', ['$scope'function($scope) { 
    33. $scope.todos = [ 
    34. {text:'learn angular', done:true}, 
    35. {text:'build an angular app', done:false}]; 
    36.  
    37. $scope.addTodo = function() { 
    38. $scope.todos.push({text:$scope.todoText, done:false}); 
    39. $scope.todoText = ''
    40. }; 
    41.  
    42. $scope.remaining = function() { 
    43. var count = 0; 
    44. angular.forEach($scope.todos, function(todo) { 
    45. count += todo.done ? 0 : 1; 
    46. }); 
    47. return count; 
    48. }; 
    49.  
    50. $scope.archive = function() { 
    51. var oldTodos = $scope.todos; 
    52. $scope.todos = []; 
    53. angular.forEach(oldTodos, function(todo) { 
    54. if (!todo.done) $scope.todos.push(todo); 
    55. }); 
    56. }; 
    57. }]); 
    58. </script> 
    59. </body> 
    60. </html> 

    上面的輸入框和按鈕其實用下面的代碼也能實現

     

     
    1. <input type="text" ng-model="todoText" size="30" 
    2. placeholder="add new todo here"
    3. <input class="btn-primary" type="button" value="add" ng-click="addTodo()"

    之所以官方的示例中用了

    實現是為了實現輸入內容后直接按Enter鍵也能提交。

     

    我們也是在做 Worktile 的過程中對Angular.js一步步了解的,那些Angular.js必踩的坑也都一一踩過,毋庸置疑,Angular.js的確是一個非常優秀的前端MV*框架。

    以上所述就是本文的全部內容了,希望這篇文章能夠帶給正準備使用Angular.js技術的你一些幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线视频一区| 亚洲一区二区福利| 91精品国产综合久久香蕉| 日韩中文字幕第一页| 最近日韩中文字幕中文| 国产精品免费观看在线| 久久久久久久影视| 日产精品久久久一区二区福利| 91亚洲国产精品| 原创国产精品91| 国产精品一区二区三区在线播放| 久久久91精品| 久久久精品久久久久| 成人精品网站在线观看| 欧美大片免费看| 日韩精品欧美国产精品忘忧草| 91在线视频一区| 色婷婷av一区二区三区在线观看| 久久精品国产99国产精品澳门| 欧美一级片在线播放| 国产精品91在线| 久久精品男人天堂| 久久亚洲精品小早川怜子66| 5566日本婷婷色中文字幕97| 亚洲国产精品va在线| 精品久久久国产精品999| 日韩av综合中文字幕| 日韩女在线观看| 精品露脸国产偷人在视频| 亚洲精品少妇网址| 亚洲精品黄网在线观看| 欧洲亚洲女同hd| 中文字幕欧美专区| 欧美大片免费观看在线观看网站推荐| 成人网址在线观看| 精品国产一区二区三区四区在线观看| 国产精品网址在线| 色阁综合伊人av| 欧美另类在线观看| 国产精品丝袜久久久久久不卡| 精品久久久久久久久久久久久| 久久精品国产v日韩v亚洲| 精品美女久久久久久免费| 久久免费成人精品视频| 日韩视频第一页| 国产成人鲁鲁免费视频a| 狠狠综合久久av一区二区小说| 国产日韩精品综合网站| 欧美性猛交xxxx乱大交| 国产91精品久久久久久久| 6080yy精品一区二区三区| 欧美国产精品人人做人人爱| 揄拍成人国产精品视频| 久久久久成人网| 中文字幕不卡在线视频极品| 久久久久国产视频| 国产精品夫妻激情| 伊人久久综合97精品| 日韩欧美亚洲成人| 2019中文字幕全在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 精品免费在线观看| 国产精品久久一| 亚洲欧洲美洲在线综合| 91精品国产色综合久久不卡98口| 欧美一级黑人aaaaaaa做受| 亚洲一区二区在线| 亚州欧美日韩中文视频| 欧美一级大片视频| 亚洲福利视频网| 欧美一级大片视频| 国产精品一区二区在线| 亚洲人成伊人成综合网久久久| 成人黄色av网站| 国产精品久久久久久久av电影| 亚洲乱码国产乱码精品精| 亚洲欧美另类中文字幕| 国产日韩在线一区| 成人黄色在线免费| 91九色国产在线| 亚洲色图35p| 亚洲日本成人网| 国产精品video| 日韩av在线电影网| 欧美中文字幕第一页| 国产一区二区三区在线观看网站| 亚洲人成电影网| 成人激情综合网| 2018中文字幕一区二区三区| 久久久亚洲网站| 亚洲国产精品一区二区久| 亚洲人成电影网| 欧美洲成人男女午夜视频| 日韩av不卡电影| 久久精品视频在线| 欧美日韩国产综合新一区| 国产欧美最新羞羞视频在线观看| 久久久午夜视频| 国产日韩中文字幕| xx视频.9999.com| 久热国产精品视频| 高清欧美性猛交xxxx| 亚洲精品美女久久久| 亚州精品天堂中文字幕| 亚洲春色另类小说| 91中文字幕在线| 欧美午夜美女看片| 日韩中文在线不卡| 国产精品日日摸夜夜添夜夜av| 日韩中文字幕视频在线| 日韩精品免费在线视频| 7m精品福利视频导航| 91爱视频在线| 国产91精品在线播放| 日韩在线欧美在线国产在线| 这里只有精品在线观看| 日韩h在线观看| 欧美专区福利在线| 国产精品自产拍在线观看| 在线观看久久久久久| 国产精品91在线| 亚洲综合中文字幕68页| 亚洲免费小视频| 亚洲精品久久7777777| 欧美在线视频免费观看| 日韩欧美a级成人黄色| 欧美成人午夜影院| 国产亚洲精品久久久| 欧美激情高清视频| 成人黄色中文字幕| 北条麻妃一区二区在线观看| 国产欧美亚洲视频| 欧美日韩美女在线观看| 国产一区二区三区视频在线观看| 国产91精品在线播放| 日本精品久久久久影院| 欧美久久久精品| 欧洲精品久久久| 久久综合国产精品台湾中文娱乐网| 国产欧美日韩精品在线观看| 久久久久亚洲精品成人网小说| 亚洲欧美国产精品va在线观看| 视频直播国产精品| 欧美极品少妇全裸体| 亚洲欧美日韩图片| 午夜精品视频网站| 成人写真福利网| 日韩亚洲欧美成人| 日韩美女在线播放| 日韩电影大片中文字幕| 亚洲美女在线视频| 欧美激情精品久久久久久大尺度| 亚洲欧美制服丝袜| 欧美一级黄色网| 26uuu国产精品视频| 亚洲精品国精品久久99热| 欧美日韩国产精品一区二区不卡中文| 欧美电影在线免费观看网站| 2019国产精品自在线拍国产不卡| 欧美黑人一区二区三区| 综合网中文字幕| 欧美日韩精品中文字幕| 日本高清久久天堂| 亚洲精品中文字幕有码专区|