2017-07-13 1 views
0

以下のコードでは、$scope.contactListには、各連絡先のisActiveフラグのある連絡先のリストが含まれています。htmlページからangular関数を呼び出すと、どのように動作するのですか?

コントローラーから$scope.getInactiveCountを呼び出すと、非アクティブな連絡先がカウントされます。

HTMLからその関数を呼び出すとどうなりますか?毎回DOMがロードされたり実行されたりすると一度実行されますか?

新しい連絡先がリストに追加されるたびに、$scope.getInactiveCountはどのように機能をトリガーしますか?

HTMLページから呼び出される角度関数の流れを知りたいと思います。

app.js

angular.module('demo',[]).controller('demoController',function($scope){ 

    $scope.contactList=[{firstName:'John',lastName:'Moody',isActive:'Y'}, 
         {firstName:'Chris',lastName:'George',isActive:'Y'}, 
         {firstName:'Anabella',lastName:'Maze',isActive:'N'}, 
         {firstName:'Joseph',lastName:'Butler',isActive:'Y'}, 
         {firstName:'Roni',lastName:'Ray',isActive:'N'}, 
         {firstName:'Tim',lastName:'Cook',isActive:'Y'}, 
         {firstName:'Angel',lastName:'Christina',isActive:'N'}]; 

    $scope.getInactiveCount=function(){ 
     var count=0; 
     $scope.contactList.forEach(function(d){ 
      if(d.isActive=='N') 
       count++; 
     }) 
     return count; 
    }; 

    $scope.addContact=function(firstName,lastName){ 
     var contact={firstName:firstName,lastName:lastName,isActive:'N'}; 
     $scope.contactList.push(contact); 
    } 
}); 

index.htmlを

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Calling Angular function from HTML</title> 
     <script src="angular.min.js"></script> 
     <script src="app.js"></script> 
    </head> 
    <body> 
     <div data-ng-app='demo'> 
      <div data-ng-controller='demoController'> 
       Inactive contacts count: {{getInactiveCount()}} 
       <br/> 
       <div> 
        <input type=text ng-model="firstname"> 
        <input type=text ng-model="lastname"> 
        <br> 
        <input type='button' value='Add contact' ng-click='addContact(firstname,lastname)' > 
       </div> 
      </div> 
     </div> 
    </body> 
</html> 
+0

「DOM」がロードされると1回実行されます。 –

+0

これは角度101のものです –

+1

関数はすべてのダイジェストサイクルと呼ばれるので、関数を{{}} 'の束縛に入れないようにしてください。 – georgeawg

答えて

1

AngularJSたびモデル(データ)の変更を意味する双方向データバインディングシステム、ビューを有しますAngularによって再計算されています。

例では、ページが読み込まれています。角度スクリプトが起動すると、モデル($scope.contactList)が読み込まれます。

これが完了するとすぐに、$ compileプロセスが開始されます。このコンパイル・プロセスは、DOMをコンパイルし、角度イベントおよびデータ・バインディングを検索します。あなたの例では、getInactiveCount()双方向データバインディングとng-click="addContact(...)"があり、これを角度ウォッチャーに追加します。これで、ダイジェストサイクルが開始され、ウォッチャーが変数に変更されます。

各ダイジェストサイクル中に、双方向データバインディングが変更時にチェックされ、結果が変更されるかどうかを確認するために関数が実行されます。これは、getInactiveCount()関数が各ダイジェストサイクルと呼ばれることを意味します。

角度を変更すると変数が変わるたびにダイジェストサイクルが呼び出されます。たとえば、[連絡先の追加]ボタンをクリックすると、ダイジェストサイクルが呼び出されます。 addContact()関数が呼び出され、$scope.contactList()が変更され、ダイジェストサイクルが呼び出されています。今すぐgetInactiveCount()データバインディングが関数を呼び出し、表示された値が更新されます。

ブートストラッププロセスの詳細については、AngularJS Developer Guide - Bootstrapを参照してください。

+0

ありがとう@ Sand3r205。それは私が実行を理解するのを助けた:) – Nagesh

関連する問題