Angularjs 角度控制器调用函数两次

Angularjs 角度控制器调用函数两次,angularjs,firebase,firebase-realtime-database,Angularjs,Firebase,Firebase Realtime Database,我正在创建一个待办事项列表应用程序,希望在任务存在时间超过5秒时,该任务会被记录为已过期。但目前该任务被记录了两次 模板: <h2>Active</h2> <div class = "container"> <div class="tasks"> <ul> <li ng-repeat= "task in home.tasks" cl

我正在创建一个待办事项列表应用程序,希望在任务存在时间超过5秒时,该任务会被记录为已过期。但目前该任务被记录了两次

模板:

    <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(){
    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");
                };
            }
        };

    }

})();
{{home.time(task)}}
将观察程序绑定到函数,并将在摘要循环中执行多次

从文档中:

$watch(watchExpression,listener,[objectEquality])

注册一个
侦听器
回调,以便在
watchExpression
更改时执行

  • 每次调用时都会调用
    watchExpression
    ,并应返回将被监视的值。(当使用同一输入执行多次时,watchExpression不应更改其值,因为它可能由执行多次。也就是说,watchExpression应为。)


哪个控制台消息被打印两次?您有太多名为
task
的东西,很难说出您在说什么
{{home.time(task)}}
是一个函数,在摘要周期中会被多次调用。是吗?是的
{{{home.time(task)}
是被多次调用的函数。不过我只想叫一次。正确的称呼方式是什么?
(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");
                };
            }
        };

    }

})();