天天看點

AngularJSAngular 簡介Angular 表達式Angular 指令Angular 作用域(scope)Angular 控制器Angular 過濾器Angular 服務Angular 依賴注入總結

AngularJS 是一個 JavaScript 架構,它是一個以 JavaScript 編寫的庫。

AngularJSAngular 簡介Angular 表達式Angular 指令Angular 作用域(scope)Angular 控制器Angular 過濾器Angular 服務Angular 依賴注入總結

原文連結

Angular 簡介

  • AngularJS 把應用程式資料綁定到 HTML 元素。
  • AngularJS 可以克隆和重複 HTML 元素。
  • AngularJS 可以隐藏和顯示 HTML 元素。
  • AngularJS 可以在 HTML 元素”背後”添加代碼。
  • AngularJS 支援輸入驗證。

一般應用組成

  • View(視圖),即HTML
  • Model(模型),目前視圖中綁定的資料
  • Controller(控制器),即Javascript函數,可以添加或修改屬性

Angular 表達式

Angular 表達式寫在雙大括号内{{expression}},具有雙向綁定功能,不過在架構未加載之前頁面會顯示出源碼,可以使用ng-bind替代需要渲染的資料。

類似于Javascript表達式,Angular表達式可以包含字元串、變量和運算符。

與JavaScript 表達式不同,AngularJS 表達式可以寫在 HTML 中。

與JavaScript 表達式不同,AngularJS 表達式不支援條件判斷,循環及異常。

與JavaScript 表達式不同,AngularJS 表達式支援過濾器。

<p>Angular 表達式:{{'express :'+ 'Angular'}}</p>
           

Angular 指令

Angular通過指令拓展HTML

ng-app

指令告訴AngularJS該元素是AngularJS應用程式根元素。

<div ng-app="app"></div>
           

ng-model

雙向綁定元素值與變量

<div ng-app="app" ng-init="name='bestvist'">
  <input type="text" ng-model="name">
  <p><b>名字:</b> {{ name }}</p>
</div>
           

ng-repeat

重複一個HTML元素

<div ng-app="app" ng-init="category=[{name:'picture',count:10},{name:'video',count:11},{name:'text',count:50}]">
  <p>循環對象:</p>
  <ul>
    <li ng-repeat="item in category">
       {{ x.name + ', ' + x.count }}
    </li>
  </ul>
</div>
           

自定義指令

<body ng-app="app">
<my-directive></runoob-directive>
<script>
  var app = angular.module("app", []);
  app.directive("myDirective", function() {
     scope: false, 
     restrict: 'EA',
     return {
        template : "<h1>這是一個自定義指令!</h1>"
     };
  });
</script>
</body>
           

scope表明指令的作用域

  • false 共享父級作用域
  • true 繼承父級作用域并建立自己的作用域
  • {} 建立自己的作用域,與父級無關

restrict可以指定指令的調用方式

  • E 作為元素名使用
  • A 作為屬性名使用
  • C 作為類名使用
  • M 作為注釋使用

Angular 作用域(scope)

Scope 是應用在HTML和JavaScript之間的紐帶。

Scope 是一個對象,有可用的方法和屬性。

Scope 可應用在視圖和控制器上。

所有的應用都有一個 rootScope,它可以作用在ng−app指令包含的所有HTML元素中。 rootScope可作用于整個應用中。是各個controller中scope的橋梁。用rootscop,定義的值,可以在各個controller中使用。

Angular 控制器

ng-controller 指令定義了應用程式控制器。

控制器是JavaScript對象,由标準的JavaScript對象的構造函數 建立。

<div ng-app="app" ng-controller="myCtrl">
   name: <input type="text" ng-model="name"><br>
   age: <input type="number" ng-model="age"><br>
   <br>
   描述: {{"名字:"+name + ",年齡:" + age}}
</div>
<script>
   var app = angular.module('myApp', []);
   app.controller('myCtrl', function($scope) {
      $scope.name = "bestvist";
      $scope.age = 24;
   });
</script>
           

ng-controller 指令定義一個控制器,名稱為myCtrl。

$scope是控制器内的作用域對象,具有name,age兩個屬性,可以在控制器中指派。

Angular 過濾器

過濾器可用于轉換資料,使用一個管道字元 | 添加到表達式和指令中

過濾器 描述
currency 格式化數組為貨币格式
filter 從數組項中選擇一個子集
lowercase 格式化字元串為小寫
uppercase 格式化字元串為大寫
orderBy 根據某個表達式排列數組

姓名為 {{ name | uppercase }}

自定義過濾器

var app = angular.module('app', []);
app.controller('myCtrl', function($scope) {
    $scope.msg = "bestvist";
});
app.filter('reverse', function() { //可以注入依賴
    return function(text) {
        return text.split("").reverse().join("");
    }
});
           

Angular 服務

服務是一個函數或對象,可在你的 AngularJS 應用中使用。

在很多服務中,比如 location服務,它可以使用DOM中存在的對象,類似window.location對象,但window.location對象在AngularJS應用中有一定的局限性。AngularJS會一直監控應用,處理事件變化,AngularJS使用 location服務比使用 window.location 對象更好。

但服務需要在控制器中引入

var app = angular.module('app', []);
app.controller('myCtrl', function($scope, $location) {
    $scope.myUrl = $location.absUrl();
});
           

常用内置服務

  • $http 資料請求服務
  • $location url處理服務,對應于window.location
  • $timeout 定時服務,對應于window.setTimeout

自定義服務

var app = angular.module('app', []);
app.service('myService', function() {
    this.add = function (x, y) {
        return x + y;
    }
});

app.controller('myCtrl', function($scope, myService) {
    var a= 10;
    var b= 20;

    $scope.sum = myService.add(a, b);
});
           

Angular 依賴注入

依賴注入(Dependency Injection,簡稱DI)是一種軟體設計模式,

在這種模式下,一個或更多的依賴(或服務)被注入(或者通過引用傳遞)到一個獨立的對象(或用戶端)中,然後成為了該用戶端狀态的一部分。

該模式分離了用戶端依賴本身行為的建立,這使得程式設計變得松耦合,

并遵循了依賴反轉和單一職責原則。與服務定位器模式形成直接對比的是,它允許用戶端了解用戶端如何使用該系統找到依賴

一句話 — 沒事你不要來找我,有事我會去找你。

Angular 提供了5個核心元件作為依賴注入

  • value 簡單值注入,可以是Javascript對象
  • factory 工廠注入,在service和controller需要時建立
  • service 服務注入,在controller中引入
  • provider 可以建立factory和service
  • constant 常量注入,定義一些常量值使用

總結

Angular的雙向綁定使用非常友善,整體架構的MVC結構很清晰,

但是成也蕭何敗也蕭何,髒值檢測和渲染機制的複雜也使得在大量資料處理時造成頁面卡頓,性能方面還有待改善。

繼續閱讀