2017-05-24 4 views
0

Ich habe eine Tabelle mit mehreren Elementen im Inneren. Diese Artikel haben eine aktive Spalte mit einem Kontrollkästchen, das anzeigt, ob dieser Artikel aktiv ist. Der Benutzer kann manuell deaktivieren, um die Elemente zu deaktivieren, aber die Elemente haben auch ein Ablaufdatum. Was ich erreichen möchte, ist, dass wenn der Ablauf eines Artikels ankommt, die Box automatisch deaktiviert werden muss und der Status von "Aktivieren" auf "Deaktivieren" geändert werden muss. So ist der Benutzer nicht mehr zu sehen.AngularJS: Wie man ein Kontrollkästchen automatisch deaktiviert, wenn das Element bezogen auf ein Datum abgelaufen ist

ich bin mit Ihnen zu teilen, was ich als Beispiel habe:

Dies ist der Controller:

for (var i = 0; i < $scope.item.length; i++) { 
       var a = new Date($scope.item[i].to) 
       var b = new Date() 
       if ($scope.item[i].to != null && (a < b)) { 
        $scope.item[i].expired = true 
       } 

      } 
$scope.changeStatus = function(item) { 
     item.isDisabled = !item.isDisabled; 
     $scope.save(item); 
    }; 

    $scope.save = function(item) { 
     ItemResource.update(item, function success() { 
      $scope.loadingAction = false 
      toaster.pop({ type: 'success', body: $translate.instant('notifications', { name: item.name }) }) 
     }, function error() {}) 
    } 

Ausblick:

<td class="td-with-button center valign-top"> 
        <span class="cursor-pointer" ng-click="changeStatus(item)"> 
         <i class="icon--big fa fa-check-circle-o" ng-class="{'fa-check-circle-o' : !item.isDisabled, 'fa-circle-o' : item.isDisabled}"></i> 
        </span> 
       </td> 

Antwort

0

Der beste Weg, kontinuierlich zu überprüfen, ob etwas abgelaufen ist, würde wahrscheinlich eine Hintergrundfabrik erstellen. Sie könnten das immer und immer wieder überprüfen, oder Sie könnten beim Laden der Seite ein Timeout erstellen, bei dem eine Funktion ausgeführt wird, um das zu tun, was Sie möchten (senden Sie in diesem Fall eine Broadcast-Nachricht an den Controller, um das Kontrollkästchen zu deaktivieren).

angular.module('expirationCheck', []).factory('expirationCheck', ['$rootScope', function ($rootScope) { 

var service = {} 
var expDate = null; 

service.setexpDate = function(date) { 
    expDate = date; 

    var expiration = new Date(expDate); 
    var timeout = expiration.getTime() - (new Date()).getTime(); 
    setTimeout (function() { 
     $rootScope.$broadcast("Uncheck box"); 
    }, timeout); 
}  

return service; 
}]); 

In Ihrem Controller, würden Sie das facotry und rufen Sie die "setExpDate" injizieren den Timer zu starten. Dann legen Sie eine Uhr für "Uncheck box" fest und machen dort das Häkchen.

Verwandte Themen