AngularJS入門心得3——HTML的左右手指令


  在《AngularJS入門心得1——directive和controller如何通信》我們提到“AngularJS是為了克服HTML在構建應用上的不足而設計的。HTML是一門很好的為靜態文本展示設計的聲明式語言,但要構建WEB應用的話它就顯得乏力了。這里AngularJS就應運而生,彌補了HTML的天然缺陷,用於構件Web應用等。”

  那么AngularJS如何彌補HTML的缺陷,指令可能是最好的回答。

  指令是什么???

  指令就是一些附加在HTML元素上的自定義標記(可以是屬性A、元素E、css類C),可以通過AngularJS的HTML編譯器($compile)對這些標記附加指定的行為,或者操作DOM、改變DOM元素等。

  說白了,就是HTML定義的標簽不夠多,不夠強大,AngularJS通過指令可以讓HTML識別更多的標簽,具備更強的功能。

  1.指令的規范化

  在HTML命名規范中,因為不區分大小寫,所以類似myCustomer和mycustomer是一樣的,那么如何在HTML定義指令呢,常見的可以通過

  (1)     加前綴:”x-“和”data-

  (2)     在指令名之間添加間隔符:”:”,”-”,”_

        那么如何將HTML中的指令名轉化為js中的變量,相應的,有兩種方式:

  (1)     從元素或屬性的名字前面去掉x- and data-

  (2)     從:, -, 或 _分隔的形式轉換成小駝峰命名法(camelCase)

  舉例:

  HTML(通過分隔符標示):

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-example11-production</title>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
  <script src="script.js"></script>
</head>

<body ng-app="docsSimpleDirective">
  <div ng-controller="Controller">
    <div my-customer></div>
  </div>
</body>

</html>

  

  HTML(通過前綴標示):

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-example11-production</title>


  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
  <script src="script.js"></script>
</head>

<body ng-app="docsSimpleDirective">
  <div ng-controller="Controller">
    <div data-my-customer></div>
  </div>
</body>

</html>

  

  script.js:

(function(angular) {
  'use strict';
angular.module('docsSimpleDirective', [])
  .controller('Controller', ['$scope', function($scope) {
    $scope.customer = {
      name: 'Naomi',
      address: '1600 Amphitheatre'
    };
  }])
  .directive('myCustomer', function() {
    return {
      template: 'Name: {{customer.name}} Address: {{customer.address}}'
    };
  });
})(window.angular);

  

  通過在Plunker中的實時顯示結果如下:

  (ps:Plunker介紹

  簡介:Plunker is an online community for creating, collaborating on and sharing your web development ideas. Plunker 是一個用來創建、協作和分享 Web 開發思路的在線社區

  官網地址:http://plnkr.co/

  特點:

    基於 Node.js 環境運行
    實時的代碼協作
    全功能、可定制語法編輯器
    代碼更改可即時預覽效果
    代碼提示
    可 Fork、評論和分享
    完全開源,使用 MIT 許可

   )

 

 

  2.指令匹配

  AngularJS的$complie編譯器可以基於元素、屬性、類名以及注釋來匹配指令。如:

<my-customer></my- customer >//元素

<span my- customer ="exp"></span>//屬性

<!-- directive: my- customer exp -->//注釋

<span class="my- customer: exp;"></span>//類名

  

  注意:雖然上面的4種形式都可以進行指令匹配,但是,最好通過標簽名和屬性來使用指令而不要通過注釋和類名。這樣做可以更容易地看出一個元素是跟哪個指令匹配的。舉例來說:

  (1)通過元素匹配

  index.html:

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-example11-production</title>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
  <script src="script.js"></script>

</head>

<body ng-app="docsSimpleDirective">
  <div ng-controller="Controller">
    <my-customer></my-customer>
  </div>
</body>

</html>

  

  script.js:

(function(angular) {
  'use strict';
angular.module('docsSimpleDirective', [])
  .controller('Controller', ['$scope', function($scope) {
    $scope.customer = {
      name: 'Naomi',
      address: '1600 Amphitheatre'
    };
  }])
  .directive('myCustomer', function() {
    return {
      restrict: 'E', 
      template: 'Name: {{customer.name}} Address: {{customer.address}}'
    };
  });
})(window.angular);

  在html中聲明元素標簽<my-customer></my-customer>,在js中通過”restrict:‘E’”表示是通過元素來匹配。

 

  (2)通過屬性匹配

  index.html

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-example11-production</title>


  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
  <script src="script.js"></script>

</head>

<body ng-app="docsSimpleDirective">
  <div ng-controller="Controller">
    <div my-customer></div>
  </div>
</body>

</html>

  

  script.js:

(function(angular) {
  'use strict';
angular.module('docsSimpleDirective', [])
  .controller('Controller', ['$scope', function($scope) {
    $scope.customer = {
      name: 'Naomi',
      address: '1600 Amphitheatre'
    };
  }])
  .directive('myCustomer', function() {
    return {
      restrict: 'A', 
      template: 'Name: {{customer.name}} Address: {{customer.address}}'
    };
  });
})(window.angular);

  在html中聲明元素標簽<div my-customer></div>,標簽div中聲明了屬性my-customer,在js中通過”restrict:‘A’”表示是通過元素來匹配。

當然,以上的頁面顯示結果都是:

  其實本篇本來是要重點說說scope的理解以及舉個例子來聊聊獨立scope的一些機制,但是梳理一下就寫完了這篇。

  最近一直在熟悉業務,一直也沒有跟進AngularJS,倒是在重新認識Javascript,只能說之前對於js的理解實在太淺,后面有時間會繼續跟進javascript。

  本文鏈接:《AngularJS入門心得3——HTML的左右手指令

  如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。

  

友情贊助

如果你覺得博主的文章對你那么一點小幫助,恰巧你又有想打賞博主的小沖動,那么事不宜遲,趕緊掃一掃,小額地贊助下,攢個奶粉錢,也是讓博主有動力繼續努力,寫出更好的文章^^。

    1. 支付寶                          2. 微信

                      


免責聲明!

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



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