Angularjs 角度控制器调用函数两次
我正在创建一个待办事项列表应用程序,希望在任务存在时间超过5秒时,该任务会被记录为已过期。但目前该任务被记录了两次 模板: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
<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");
};
}
};
}
})();