Javascript 带ng的AngularJS函数,如果在ng内重复
我有一些时间是动态计算的,在ng重复中重复,如下所示:Javascript 带ng的AngularJS函数,如果在ng内重复,javascript,angularjs,Javascript,Angularjs,我有一些时间是动态计算的,在ng重复中重复,如下所示: <div class="col-sm-4" ng-repeat="time in scheduling.openTimes"> <label class="label label-default label-time" ng-class="{'active' : scheduling.militaryTime == time.military}" ng-click="scheduling.setTime(time.m
<div class="col-sm-4" ng-repeat="time in scheduling.openTimes">
<label class="label label-default label-time" ng-class="{'active' : scheduling.militaryTime == time.military}" ng-click="scheduling.setTime(time.military)" ng-if="!scheduling.booked(time.military)">
{{time.display}}
</label>
</div>
它可以安慰一切,但标签没有隐藏?控制台显示应该是
更新
通过一些研究和大量删除,我得出了这个结论。只要你只有一个约会,它就可以工作,并且做我想要的事情。如果有多个,则会复制时间段。如何使它检查时间是否已在数组中,如果已在数组中则跳过它
scheduling.booked = function(time, timeDis) {
ref.child('appointments').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var data = childSnapshot.val();
var sysDate = new Date(scheduling.date).getDate();
var appDate = new Date(data.date).getDate();
var appTime = data.time.military;
if(sysDate == appDate)
{
if(appTime == time)
{
$scope.openTimes.push({
'military' : time,
'display' : timeDis,
'disabled' : true
})
}
else
{
$scope.openTimes.push({
'military' : time,
'display' : timeDis,
'disabled' : false
})
}
}
else
{
$scope.openTimes.push({
'military' : time,
'display' : timeDis,
'disabled' : false
})
}
})
});
$timeout(function(){
scheduling.openTimes = $scope.openTimes;
scheduling.timeLoading = false;
}, 1300)
}
我现在有另一个函数调用这个函数,我已经放弃了ng if。您的函数
调度。booked
没有返回。因此它总是返回未定义的
。因此,当angular解释时,ng if=“!scheduling.booked(time.millitary)”
将是ng if=“true”
(!undefined
等于true
)。这解释了为什么显示所有记录
我认为下面的代码应该可以工作
scheduling.booked = function(time) {
var booked = false;
ref.child('appointments').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var data = childSnapshot.val();
var sysDate = new Date(scheduling.date);
var appDate = new Date(data.date);
var appTime = data.time.military;
if (appDate.getDay() == sysDate.getDay() && appTime == time) {
booked = true;
}
})
});
return booked; // <-- make sure the function has a return value
}
scheduling.booked=功能(时间){
var=false;
ref.child(‘约会’)。一次(‘值’,函数(快照){
snapshot.forEach(函数(childSnapshot){
var data=childSnapshot.val();
var sysDate=新日期(scheduling.Date);
var appDate=新日期(data.Date);
var appTime=data.time.military;
if(appDate.getDay()==sysDate.getDay()&&appTime==time){
预订=真实;
}
})
});
return booked;//虽然更干净,但它并没有隐藏任何内容。我认为这是因为html在函数返回之前正在解析?这可能吗?函数正在以应有的方式记录所有内容。因此……当时间被预定时,函数将以应有的方式返回true。但是标签并没有隐藏。您在哪里插入console.log
?正如我所说,您的函数在每次调用时都将返回未定义的
。因此ng if=“!scheduling.booked(time.millity)
将是ng if=“!undefined"
。这解释了显示所有记录的原因。就在返回预订;
的正上方,它需要返回true或false来显示时间或隐藏时间。它有多复杂?您可以在调度功能中通过简单地返回true或false来尝试一次,以便我们可以缩小问题的范围吗?只需返回true使用@stanleyxu2005的答案并删除ref.child()…可以使函数正常工作。返回false也是如此。因此,我怀疑HTML在函数返回之前正在解析。
scheduling.booked = function(time) {
var booked = false;
ref.child('appointments').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var data = childSnapshot.val();
var sysDate = new Date(scheduling.date);
var appDate = new Date(data.date);
var appTime = data.time.military;
if (appDate.getDay() == sysDate.getDay() && appTime == time) {
booked = true;
}
})
});
return booked; // <-- make sure the function has a return value
}