2016-03-10 46 views
0

我有動態計算的一些時間,在NG-重複再重複,像這樣:AngularJS功能的NG-如果裏面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()被調用每一個標籤上。如果時間「已預訂」,它應該返回true,否則返回false。

我想要顯示的時間,如果時間NOT BOOKED。我的功能看起來是這樣的:

 scheduling.booked = function(time) 
    { 
     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()) 
       { 
        if(appTime == time) 
        { 
         return true 
        } 
        else 
        { 
         return false 
        } 
       } 
       else 
       { 
        return false 
       } 
      }) 
     }) 

    } 

它安慰了一切就像它應該但標籤不隱藏?控制檯顯示應該是。

更新

通過一些研究和大量刪除的,我這個走了過來。只要你只有一個約會,它就可以工作,做我想做的事。如果你有多個,它會複製時隙。你如何做到這一點,所以它檢查時間是否已經在數組中,如果它是跳過它?

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。

+0

你可以嘗試一次,通過簡單地在'scheduling.booked'函數內返回true或false,以便我們可以縮小問題的範圍嗎? –

+0

只需使用@ stanleyxu2005的答案返回true,然後移除ref.child()就可以使函數正常工作。返回false也是如此。所以它回到我懷疑HTML是在函數返回之前解決的。 – moevans

回答

0

你的功能scheduling.booked沒有return。所以它總是會返回undefined。因此,當角度解釋ng-if="!scheduling.booked(time.military)"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 
} 
+0

雖然更清潔,但它並沒有隱藏任何東西。 – moevans

+0

我認爲這是因爲html在函數返回之前解析?那可能嗎? – moevans

+0

該函數是控制檯記錄所有它應該記錄的內容。所以......當預訂時間時,函數返回true,就像它應該那樣。標籤雖然沒有隱藏。 – moevans