2015-05-15 2 views
0

я есть нг нажмите событие так:избежать добавления дублирующих элементов в коллекции нг-повторов, в Angular.js

$scope.submitInfo = function myfunction() { 
     var itemToAdd = { 
      Id : generateUUID(), 
      Name: $scope.Name, 
      Email: $scope.Email, 
      Phone: $scope.Phone 
     }; 
     $scope.Info.push(itemToAdd); 
    } 

моя проблема, я хочу, чтобы проверить, если же ID или Name это уже не существует in $scope.Info коллекция.

я дина- foucs на angular.js, я ищу лучшее решение для такого рода сценария

+0

вам придется перебирать коллекцию и сравнить каждую строку данных, добавляемых. – Claies

+1

Возможный дубликат [Array .push(), если не существует?] (Http://stackoverflow.com/questions/1988349/array-push-if-does-not-exist) – Alex

ответ

0

Вы можете использовать $filter.

Что-то вроде этого:

$scope.submitInfo = function myfunction() { 
    var itemToAdd = { 
     Id : generateUUID(), 
     Name: $scope.Name, 
     Email: $scope.Email, 
     Phone: $scope.Phone 
    }; 
    var foundElement = $filter('filter')($scope.Info, {Name: $scope.Name}, true); 

    if (foundElement.length === 0) { 
     $scope.Info.push(itemToAdd); 
    } 
}; 

Конечно, вам нужно впрыснуть $ фильтра в контроллере/фабрики/независимо

0

Try это - Внутри вашей представить функции записи ниже кода т.е.

$scope.submitInfo = function myfunction() { 
    var itemToAdd = { 
     Id : generateUUID(), 
     Name: $scope.Name, 
     Email: $scope.Email, 
     Phone: $scope.Phone 
    }; 
    if(($scope.Info.indexOf(itemToAdd.id) != -1) || ($scope.Info.indexOf(itemToAdd.Name) != -1) { 
     $scope.Info.push(itemToAdd); 
    } 
} 
+0

@ vir это работает для вас? – User2

0

Вы можете использовать собственный фильтр Javascript (не поддерживаемый IE8), чтобы проверить, есть ли элемент с таким именем:

var duplicates = $scope.Info.filter(function(item) { 
    return item.Name = $scope.Name; 
}); 
var nameExists = duplicates.length > 0; 

И ваш полный метод:

$scope.submitInfo = function myfunction() { 
    var duplicates = $scope.Info.filter(function(item) { 
     return item.Id = $scope.Name; 
    }); 
    var nameExists = duplicates.length > 0; 

    if (!nameExists) { 
     var itemToAdd = { 
      Id : generateUUID(), 
      Name: $scope.Name, 
      Email: $scope.Email, 
      Phone: $scope.Phone 
     }; 
     $scope.Info.push(itemToAdd); 
    } 
} 
Смежные вопросы