2017-02-13 2 views
0

Ich habe diese Mini-App, die es dem Benutzer erlaubt, die Marke und das Modell eines Autos einzugeben, und fügt es dann der Tabelle unten hinzu. Ich habe eine Funktion hinzugefügt, die nach Duplikaten sucht und benachrichtigt, wenn in der Tabelle bereits vorhandene vorhanden sind. Wenn keine Datensätze vorhanden sind, die übereinstimmen, wird das neue "make" und "model" in die Tabelle verschoben. Ich habe den Code so geändert, dass er _.isEqual verwendet und nicht mehr wie zuvor. Jetzt wird er jedes Mal, wenn ich ihn starte, beim Alert gefangen. Wer weiß was vor sich geht?Funktion, die nach Duplikaten sucht, die nicht richtig funktionieren

<div>Make: <input type="text" ng-model="make"></div> 
<div>Model:<input type="text" ng-model="model"></div> 
<button ng-click="add()">Add</button> 

<tr> 
     <th>Make</th> 
     <th>Model</th> 
    </tr> 
    <tr ng-repeat="car in cars" ng-click="rowClick(car)"> 
     <td>{{car.make}}</td> 
     <td>{{car.model}}</td> 
    </tr> 

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

carsApp.controller('carController', function ($scope){ 

    $scope.cars = []; 

    $scope.add = function() { 

     var newCar = { 
     make: $scope.make, 
     model: $scope.model 
     }; 

     function hasDuplicates(){ 
     angular.forEach($scope.cars, function(car, key){ 
      _.isEqual(car, newCar); 
     }); 
     } 

     if (hasDuplicates) { 
      alert("Car already exists"); 
      } else { 
      $scope.cars.push(newCar); 
      } 
     }  

     $scope.rowClick = function(car){ 
      $scope.make= car.make; 
      $scope.model= car.model; 
     }; 

     $scope.make = null; 
     $scope.model = null; 

    }); 
+0

Weil Sie nur '_.isEqual (Auto, NewCar) überprüfen;' aber tun wirklich nichts mit dem Ergebnis. Sie sollten etwas tun wie 'isEqual = isEqual || _.isEqual (car, newCar); 'und gib das Ergebnis zurück –

+2

Du rufst auch nicht die' hasDuplicates' Funktion auf, also 'if (hasDuplicates)' wird immer wahr sein. – hughes

+0

@hughes danke! –

Antwort

0

mit einer einfacheren Option gehen Ended und angular.equals stattdessen verwendet. isEqual war zu mühsam um es richtig zu implementieren. Danke für die Hilfe!

function hasDuplicates(newCar){ 
    var returnVal = false; 
    angular.forEach($scope.cars, function(car, key){ 
     if (angular.equals(car, newCar)) 
     { 
      returnVal = true; 
     } 
     }); 
    return returnVal; 
    }; 
Verwandte Themen