擁抱AngularJS

jopen 9年前發布 | 28K 次閱讀 angularjs


文中一些地方AngularJS簡稱ng

簡介:

ng誕生于2009年,由Misko Hevery等創建,后被Google收購,為克服HTML在構建應用上的不足而設計。

是一款優秀的前端JS框架,核心特性:MVVM(Model-View-ViewModel)、模塊化、雙向數據綁定、依賴注入。

官網: https://angularjs.org/

中文網: http://www.apjs.net/

入門:

圖靈社區

書籍:

用AngularJS開發下一代Web應用

AngularJS權威教程

源碼:

GitHub

https://code.angularjs.org/

API:

AngularJS   API

介紹:

模塊介紹:(v1.4.0)

  • angular.js                   ng 核心
  • angular-route.js     ng 路由( 參考地址
  • angular-animate.js          ng 動畫( 參考地址
  • angular-cookies.js          ng Cookie( 參考地址
  • angular-sanitize.js         ng 安全模塊(應對XSS)
  • angular-messages.js         ng 表單驗證(參考地址)
  • angular-resource.js         ng restful數據交互(然并卵,只是封裝了一層$http,可以用來請求本地json文件)
  • angular-mocks.js            ng 單元測試工具類( 參考地址
  • angular-loader.js           ng 單元測試用(異常捕獲, 參考地址
  • angular-scenario.js         ng 單元測試用
  • angular-touch.js            ng gestoures(針對移動端,基于jQuery Mobile的touch事件。 不過貌似不太好用
  • angular-aria.js             ng 富互聯網應用(Accessible Rich Internet Applications,貌似沒啥用)
  • angular-meesage-format.js   ng 編譯相關(謹慎使用,該文件只有當 閉合編譯器 的高級選項標識時才會編譯)

控制器(controller):

簡單理解為- 通過依賴注入的方式,把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'});
}]);

指令(directive):

簡單理解為-在特定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);
        }
      }
    }
  }
})

參考資料:

服務(service):

簡單理解-單例對象

三種構建方式:

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應用場景:

  1. 當我們需要在應用開始前對service進行配置的時候,eg:我們需要配置services在不同的部署環境里(開發、測試、生產),使用不同的后端接口處理時。
  2. 當我們打算發布開源時。

參考資料: AngularJS中factory,service,provider的區別 

過濾器(filter):

用于處理數據的格式化(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詳解

其他資料:

Angular學習筆記

AngularJS表單基礎

何時應該使用Directive、Controller、Service?

AngularJS+RequireJS

AngularJS與RequireJS集成

玩轉AngularJS的promise

實戰總結:

AngularJS實戰總結

AngularJS中的一些坑

AngularJS開發一些經驗總結

深入:

AngularJS數據雙向綁定揭秘

理解AngularJS的依賴注入

總結:

初識ng時,被它的依賴注入所迷惑,又被它的雙向數據綁定深深吸引,顛覆了以往用jQuery做項目時的思想。

僅記得做Java項目時,spring框架有一套依賴注入的模式。前端框架中引入依賴注入的思想,不得不佩服ng作者的腦洞。

后端出生的FE,難以抗拒地喜歡上了這個JS框架,雖然它被很多人質疑(學習成本高,太臃腫etc)。

相信會有更多的FE engineer愛上它。
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!