Javascript 带ng的AngularJS函数,如果在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

我有一些时间是动态计算的,在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.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
}