AngularJS (6) directive 基本介紹

directive宣告子,讓我們自定屬性、標籤、或是CSS樣式。
  • <div my-dir>
  • <my-dir>
  • <div class="my-dir">

目前我知道的,宣告子用來匯入外部HTML、綁定javascript事件如滑鼠或鍵盤、和控制器溝通。 宣告子的命名方式,在javascript用駝峰式大小寫(camel-case)。

  • "myDir"

在HTML建議用破折號(dash-delimited format)。

  • <my-dir>

先來看自定屬性的宣告方式,下篇再聊如何自定標籤和自定CSS。


一個宣告子

(Plunkr)

我們想要印出"Hello world!!"字樣,首先在<head>宣告了my-greet。

<head>
   <script>
      var app1 = angular.module("app1",[]);
      app1.directive('myGreet', function(){
         return {
           template: "Hello world!!"
         };
      });
   </script>
</head>

在<body>呼叫自定屬性的myGreet,在HTML改稱為my-greet。

<body ng-app="app1">
    <div my-greet></div>
</body>


一個宣告子和一個控制器

宣告子可以使用控制器的變數。正確來說,宣告子沿用控制器的scope。
我們改寫上例,用控制器儲存名字"Lily"

<body ng-app="app1">
    <div ng-controller="HelloController">
      <div my-greet></div>
    </div>
</body>

<head>
<script>
   var app1 = angular.module("app1",[]);

   app1.controller("HelloController",  
       ['$scope',function($scope){
          $scope.name = "Lily";
   }]);
   
   app1.directive('myGreet', function(){
      return {
         template: 'Hello world!! I am {{name}}'
   };
});
</script>
</head>

※控制器也可以用一般宣告方式

app1.controller('HelloController',function($scope){
   $scope.name = 'Lily';
});


一個宣告子和兩個控制器

(Plunkr)

前一段說過,宣告子沿用控制器的scope,在這個例子就更能看出來。
這次,我們除了印出"Lily",再加上第二個控制器印出"Ihc"

app1.controller("HelloController",['$scope',function($scope){
  $scope.name = "Lily";
}]);
app1.controller("HelloController2",['$scope',function($scope){
  $scope.name = "Ihc";
}]);/*新增*/
改寫一下HTML,在HelloController2呼叫mg-greet
<body ng-app="app1">
    <div ng-controller="HelloController">
      <div my-greet></div>
    </div>
    <div ng-controller="HelloController2">
      <div my-greet></div>
    </div>
</body>

有趣吧!^_^

留言

這個網誌中的熱門文章

ajax call relative url 相對網址

AngularJS (8) directive templateUrl