2017-03-01 4 views
0

Ich bin neu in eckigen js. Ich habe ein Kontrollkästchen mit einer Tabelle.Entfernen Sie den ungeprüften Wert aus einem Array Winkel js

<td><input type="checkbox" ng-if="report.attributes.message.length > 0" ng-bind="report.attributes.message" ng-click="getcheckedData(report.attributes.message)">{{ report.attributes.message }}</td> 

Hier habe ich eine Methode getcheckedData(). Also, in diesem Verfahren

var messages = []; 

    $scope.getcheckedData = function(SelectedVal) {  
     $("input:checkbox[type=checkbox]:checked").each(function() { 
      if ($.inArray(SelectedVal , messages) === -1){ 
       messages.push(SelectedVal); 
      } 
     }); 
     return messages; 
    }; 

Ich habe ein Array, das ich global deklarierte, .So ich den Wert der ausgewählten Option Tabellendaten in das Array zu nehmen. Ich kann diesen Wert in array bekommen. Wenn der Benutzer den Haken ablehnt, sollte der Wert, der nicht markiert ist, ebenfalls von diesem array entfernt werden. Also, wenn Benutzer dann überprüft, Ich habe eine Taste auf dem ich alle überprüften Nachrichten an das Backend gesendet. Also, wenn ich die Schaltfläche deaktivieren und drücken Sie die Zeit, alle Nachrichten bleiben noch im Array.

$scope.sendAllMessages = function() {  
     uploadService.SendMessagesToQueue(uploadService.currentFileName,$scope.documentType,messages) 
    .then(function() { 
     }, function (error) { 
     $scope.errorMessage = error.status + " : " + error.statusText; 
     toastr.error($scope.errorMessage, 'Error : ' + error.status); 
     if (error.status === 401) { 
      loginService.authenticationError(); 
     } 
     }) 
     .finally(function() { 

     }); 
    }; 

Für button -

<button type="submit" ng-click = "sendAllMessages()" class="button-size btn btn-primary">Send </button> 

so, Wie kann ich dieses Problem lösen?

Antwort

2

Was Sie getan haben, ist nicht der eckige Weg des Erreichens, was Sie brauchen.

Aber wenn Sie auf die gleiche Weise wie Ihre tun müssen, hier ist die Änderung, die Sie tun sollten.

Sie sollen den Wert aus dem Array entfernt werden, wenn es nicht aktiviert ist, mit messages.splice(index, 1);

Hier ist der veränderte Code Ihrer, ohne ng-Modell (nicht empfohlen)

var messages = []; 

    $scope.getcheckedData = function(SelectedVal) {  

      if ($.inArray(SelectedVal , messages) === -1){ 
       messages.push(SelectedVal); 
      } 
      else 
      { 
      var index = messages.indexOf(SelectedVal) 
      messages.splice(index, 1); 
      } 

     return messages; 
    }; 

zu erreichen Sie es in eckiger Weise, müssen Sie verwenden ng-model

Hier ist ein Beispiel mit Ang ular

var app = angular.module('app', []); 
 

 
function Ctrl($scope) { 
 
    
 
    $scope.messages = { 
 
     
 
    }; 
 

 
    $scope.reports = [ { "name": "Sport", "id": "50d5ad" } , {"name": "General", "id": "678ffr" } ]; 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-controller="Ctrl" ng-app="app"> 
 
    <span ng-repeat="report in reports"> 
 
     <label class="checkbox" for="{{report.id}}"> 
 
     <input type="checkbox" ng-model="messages[report.id]" name="group" id="{{report.id}}" /> 
 
     {{report.name}} 
 
     </label> 
 
    </span> 
 
    <pre ng-bind="messages | json"></pre>  
 
</div>

+0

Dank für Ihre Hilfe, Eigentlich ist es nicht für mich arbeiten. Wenn ich das überprüfe, dann füge ich ein Array hinzu, aber wenn ich es abchecke, bleibt es auch im Array. Aber das nächste Mal, wenn ich überprüfe, dann entfernt es von array.check und uncheck ist nicht korrekt. – ganeshk

+0

hast du den eckigen weg versucht? – Sravan

+0

Ja ich habe es versucht. Aber kein Glück – ganeshk

Verwandte Themen