學習筆記-AngularJs (一)


最近對AngularJs產生了濃厚的學習興趣,於是便搜羅所有資料,開始學習起來,也希望把學習過程記錄下來。

首先學習之前,需要對AngularJs進行個大概的了解:

AngularJS[1]  誕生於2009年,由Misko Hevery 等人創建,后為Google所收購。是一款優秀的前端JS框架,已經被用於Google的多款產品當中。AngularJS有着諸多特性,最為核心的是:MVVM、模塊化、自動化雙向數據綁定、語義化標簽、依賴注入等等。

AngularJS使用了不同的方法,它嘗試去補足HTML本身在構建應用方面的缺陷。AngularJS通過使用我們稱為標識符(directives)的結構,讓瀏覽器能夠識別新的語法。例如:
使用雙大括號{{}}語法進行數據綁定;
使用DOM控制結構來實現迭代或者隱藏DOM片段;
支持表單和表單的驗證;
能將邏輯代碼關聯到相關的DOM元素上;
能將HTML分組成可重用的組件。
AngularJS主要考慮的是構建CRUD應用,不適合游戲,圖形界面編輯器,這種DOM操作很頻繁也很復雜的應用。
就不寫hello world的程序例子,直接先展現一個項目目錄,這樣對一個項目的構建才有所眉目,不至於無從下手,覺得angular.js官方給的phonecat項目是值得學習的,js文件目錄主要如下圖:
 
 
js文件目錄:
 
一、app.js  項目的配置文件,路由的配置,模塊的依賴可以寫在這里。demo:
 
var phonecatApp = angular.module('phonecatApp', [  'ngRoute',  'phonecatAnimations',
  'phonecatControllers',  'phonecatFilters',  'phonecatServices','phonecatDirectives']); 
 
//路由
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider. 
when('/phones', {
templateUrl: 'partials/phone-list.html',//模板的相對路徑
controller: 'PhoneListCtrl' //使用的控制器名
}).
when('/phones/:phoneId', {
templateUrl: 'partials/phone-detail.html',
controller: 'PhoneDetailCtrl'
}).
otherwise({
redirectTo: '/phones'
});
}]);

 

 
 
//使用angular.moudle(' phonecatApp',[...])進行模塊化, phonecatApp 就是ng-app的值,ng-app指的是從擁有該指令的html標簽開始,將整個控制權交給angular.js去管理,[...]是對模塊的依賴,通俗地講,就比如[]里面的 'phonecatControllers',那么之后在controller.js(后面有講)就可以直接
 
var phonecatControllers = angular.module('phonecatControllers', []); //'phonecatControllers'此處在app.js有進行模塊依賴了,所以這里就這樣寫
phonecatControllers.controller("控制器名",function($scope){...})

 

 
以往的套路是這樣的,
var phonecatApp = angular.moudle("phonecatApp",[]);
然后phonecatApp.controller("控制器名",function(){...}),這樣的話那么我們指令、服務、過濾器都需要寫在同一個js文件。當然也是可以沒有錯的,但是把所有js代碼寫在同一個js文件里面,太臃腫了,管理起來也難!
 
路由的設置也在這里寫,路由的知識以后再詳細講,這里只是講整個項目的目錄。
 
二、controller.js  項目的控制器文件,所有控制器寫在這里。demo:
 
var phonecatControllers = angular.module('phonecatControllers', []); 
phonecatControllers.controller("控制器名",['$scope' ,'$http',function($scope,$http){...}]);

 

 
三、services.js  項目的服務文件,根據angualr的依賴注入機制,可以自己寫服務,然后在寫控制器代碼時傳入,如:phonecatControllers.controller("控制器名",['$scope' ,'myservice',function($scope,myservice){...}]);  myservice是自定義的服務,這樣就可以注入,在不同控制器調用同個業務(引入$http等來異步獲取數據,因為不同控制器操作的源是一樣的,所以可以封裝成一個服務供調用),可以使用自定義服務來進行封裝,供不同控制器注入調用,盡量不要使用$命名,以免沖突出現錯誤。demo:
var phonecatServices = angular.module('phonecatServices', [...]); //同上所述,[...]為依賴

phonecatServices.factory('Phone', function(){

  return ['1882345555','123453222'];

});

 

編寫服務js,分別有factory、provider、service方法,這里使用factory,這樣的話在controller.js寫控制器的時候,就可以注入使用了,上面有闡述了。

四、filters.js  項目過濾器文件,看過大概看了一下angular.js內置的一些過濾器(如date、curreny等,因為是初學,所有只是大概看了一下,之后會繼續學習深入的),那往往是不夠用的,往往我們需要自己自定義一些過濾器,這樣的話我們就可以在我們的模板文件(.html)中引入了,如<input ng-model='xxx' type="text" onlyNum />或是<span>{{XxXX | touuper }}</span>,onlyNum(限制只能輸入數字)、touuper(轉換成大寫字母)就是我們自定義的過濾器。demo:
var phonecatFilter = angular.module('phonecatFilters', []); //同上所述,[...]為依賴
phonecatFilter.filter('touuper', function() {
   return function(input) {
       return input.toUpperCase();
   };
});

 

五、directives.js 項目的指令文件,這里寫的是項目中,我們自己自定義的標簽,制定的標簽可以引入到模板文件里面使用,其代表含義,我們在directives.js中去定義,這個也是angualr.js比較有特點的功能,原本的html標簽已經很豐富的了,但是這樣的自定義標簽可以使htmldom結構中更能自定義話,ng-*就是指令,可以去打開源碼去看,它們都會被編譯我們熟悉的屬性、html標簽,而指令有着四種形式AEMC,分別是attrs、element、注釋、class,demo:
angular.module('phonecatDirectives', []).directive("hello", function() {
return {

scope: {} ,//是否具有獨立作用域
restrict: 'AEMC',   //定義類型
template: '<div>Hi everyone!</div>',  //模板
replace: true  //是否替換原來的節點

link: function(scope,element,attrs,[controller]){ 

//定義指令的行為,如果不需要則不需引入

}

compile:function(){

//編譯指令時的函數

}

templateUrl: ""  //模版路徑
}
});

 http://t.cn/RUbL4rP

總結:這里主要講了,一個angualr項目的基本目錄,方便之后去創建一個項目,不會說沒有思路,這里的js文件主要有,app.js、controllers.js、services.js、filters.js、directives.js,分別是基本配置、控制器、服務、過濾器、指令,在配合模版(.html)使用,實現mvc模式的設計思路,之后每一分塊會繼續學習,繼續深入,然后記錄下來,在這里先講目錄。這確實是一門很有前途的技術,會好好學習的! 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM