文中一些地方AngularJS簡稱ngjavascript
ng誕生於2009年,由Misko Hevery等建立,後被Google收購,爲克服HTML在構建應用上的不足而設計。html
是一款優秀的前端JS框架,核心特性:MVVM(Model-View-ViewModel)、模塊化、雙向數據綁定、依賴注入。前端
官網:https://angularjs.org/java
中文網:http://www.apjs.net/jquery
參考地址
git
用AngularJS開發下一代Web應用angularjs
AngularJS權威教程github
GitHubweb
https://code.angularjs.org/spring
模塊介紹:(v1.4.0)
簡單理解爲-經過依賴注入的方式,把service、依賴關係以及其餘對象串聯到一塊兒,而後經過$scope把它們關聯到view上。
var app = angular.module('app', []); app.controller('indexCtrl', ['$scope', 'demoService', function($scope, demoService) { $scope.name = demoService.getName(); }])
路由控制:
var app = angular.module('app', ['ngRoute']); app.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/list', { templateUrl: 'module/order/list.html', controller: 'listCtrl' }) .when('/detail/:orderid', { templateUrl: 'module/order/detail.html', controller: 'detailCtrl' }) .otherwise({redirectTo: '/dashboard'}); }])
簡單理解爲-在特定DOM上運行的函數,指令能夠擴展這個DOM的功能。
應用場景:封裝通用插件
var app = angular.module('app', []); app.directive('tree', function($location) { return { restrict: 'EA', replace: true, scope: { treeNodes: '=' }, templateUrl: './script/directive/template/treeTmpl.html', link: function($scope, $element, $attrs) { $scope.directTo = function(url) { if(!!url) { $location.path(url); } } } } })
參考資料:
簡單理解爲-單例對象
三種構建方式:
factory、service、provider
區分:
factory須要建立一個對象,並return這個對象。比較經常使用且容易理解。
var app = angular.module('app', []); app.factory('demoService', function() { var service = { getName: function() { var myName = 'Tom'; return myName; } }; return service; })
service接收一個構造函數,不須要建立一個對象並return。跟factory的方式區別不大,源碼裏只是加了層封裝。
var app = angular.module('app', []); app.service('demoService', function() { this.getName: function() { var myName = 'Tom'; return myName; } })
provider是建立service最底層的方法,須要在自帶的$get()方法裏作邏輯。跟上面兩個的區別在於:能夠經過config()方法配置建立service。
var app = angular.module('app', []); app.provider('demoService', function() { this.$get = function() { var service = { getName: function() { var myName = 'Tom'; return myName; } } return service; } })
provider應用場景:
參考資料:AngularJS中factory,service,provider的區別
用於處理數據的格式化(format),eg:日期格式化、數字精度處理、字符串截取、對象排序等。
var app = angular.module('app', []); app.filter('sortFilter', function() { return function(type) { if(type.toUpperCase() == 'ASC') { return 'DESC'; } else { return 'ASC'; } } })
參考資料:AngularJS filter詳解
什麼時候應該使用Directive、Controller、Service?
初識ng時,被它的依賴注入所迷惑,又被它的雙向數據綁定深深吸引,顛覆了以往用jQuery作項目時的思想。
僅記得作Java項目時,spring框架有一套依賴注入的模式。前端框架中引入依賴注入的思想,不得不佩服ng做者的腦洞。
後端出生的FE,難以抗拒地喜歡上了這個JS框架,雖然它被不少人質疑(學習成本高,太臃腫etc)。
相信會有更多的FE engineer愛上它。
文中如有不妥之處,請留言or私信告知,不甚感激。