2017-06-28 12 views
0

私は予定リストアプリケーションを作成していますが、タスクがそこに5秒以上置かれていると、タスクはconsole.loggedの期限が切れます。しかし、現在、タスクは2回記録されています。角度制御器を2回呼び出す

テンプレート:

<h2>Active</h2> 
     <div class = "container"> 
      <div class="tasks"> 
      <ul> 
       <li ng-repeat= "task in home.tasks" class="task">{{task.task}}{{home.time(task)}}</li> 
      </ul> 
      </div> 
     </div> 

コントローラー:

(function(){ 
     function HomeCtrl(Task, $timeout){ 
      // Tasks 
      this.tasks = Task.all; 

      //Adding tasks 
      this.taskName = null; 
      this.addTask = Task.addTask; 

      //Expired 
      this.time = Task.createdAt; 

     } 
     angular 
      .module('Blocitoff') 
      .controller('HomeCtrl', ['Task', '$timeout', HomeCtrl]); 
    })(); 

サービス:

(function(){ 
    angular 
     .module('Blocitoff') 
     .factory('Task', ['$firebaseArray', Task]) 

    function Task($firebaseArray){ 

     var ref = firebase.database().ref().child("tasks"); 
     var tasks = $firebaseArray(ref); 



     return { 
      all: tasks, 

      addTask: function(){ 
        tasks.$add({ task: this.taskName, timeCreated: (Date.now())}).then(function(ref) { 
         var id = ref.key; 
         console.log("added record with id " + id); 
         tasks.$indexFor(id); // returns location in the array 
        }); 
       alert(this.taskName + " has been added to active tasks"); 
      }, 

      createdAt: function(task){ 
       if(Date.now() - task.timeCreated > 5000){ 
        console.log(task.task + " has expired"); 
       }; 
      } 
     }; 

    } 

})(); 
+0

であります2回印刷されますか? –

+0

あなたには、あなたが話していることを伝えるのが難しい「仕事」という名前の物がたくさんあります。 '{{home.time(task)}}'はダイジェストサイクル中に複数回呼び出される関数です。それは1つですか? – georgeawg

+0

はい '{{home.time(task)}}'は複数回呼び出されている関数です。私はそれを一度呼びたいだけです。それを呼び出す正しい方法は何でしょうか? – Tchbell

答えて

0

{{home.time(task)}}関数にウォッチャーに結合し、ダイジェストサイクル中に複数回実行されます。ドキュメントから

$watch(watchExpression, listener, [objectEquality]);

はたびwatchExpression変更実行するlistenerコールバックを登録します。

  • watchExpression$digest()を呼び出すたびに呼び出され、注目される値を返す必要があります。 (それは$digest()によって複数回実行することができるため、同じ入力で複数回実行されたときwatchExpressionは、その値を変更してはならない。つまり、watchExpressionはidempotentなければならない。)コンソールメッセージは

— AngularJS $rootScope/$scope API Reference - $watch

関連する問題