2017-02-13 35 views
0

我有這個小應用程序,允許用戶輸入汽車的品牌和型號,然後將其添加到下表。我添加了一個函數來檢查重複項,並在表中已經存在的情況下發出警報。如果沒有匹配的現有記錄,它會將新的「make」和「model」推送到表中。我改變了代碼使用_.isEqual而不是我之前所做的,現在它每次運行時都會在Alert中被捕獲。任何人都知道發生了什麼事?功能,它檢查重複項工作不正常

<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

因爲你只檢查'_.isEqual(汽車,newCar);',但真的不這樣做,結果什麼。你應該做一些像isEqual = isEqual ||的事情_.isEqual(汽車,newCar);'並返回 –

+2

您還沒有調用'hasDuplicates'功能的結果,所以'如果(hasDuplicates)'永遠是正確的。 – hughes

+0

@噓謝謝你! –

回答

0

結束了一個簡單的選擇要和使用angular.equals代替。 isEqual實施起來太痛苦了。感謝所有的幫助!

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