Проверить поле ввода для существующего элемента в массиве объектов?

0

в моем списке todo я не хочу, чтобы пользователь снова вводил те же todos снова... но моя проблема заключается в том, что когда я впервые ввожу что-то, например (тест), и чем я вхожу (test2), а затем снова вхожу (тест), поэтому его значение... как правильно обосновать....

скрипт https://jsfiddle.net/LaL7h6Lv/1/

HTML

<div ng-app="todoApp" ng-controller="mainCtrl">
        <ul>
          <li ng-repeat="todoItem in todoItems">{{todoItem.name}}</li>
        </ul>
    <form ng-submit="addItem()">
        <input type="text" ng-model="newItem">
        <input type="submit" name="go">
    </form>
    </div>

angularjs

angular.module("todoApp", [])
.controller('mainCtrl', ['$scope', function($scope){

  $scope.todoItems = [{'name' : 'akshay'}];
  $scope.test = false;

  $scope.addItem = function(){
      if($scope.newItem){
          $scope.checkRepeatTodo();
          if($scope.test == true){
              $scope.todoItems.push({'name':$scope.newItem});
              $scope.newItem = '';
          }else{
              alert('same todo');
              $scope.test = false;
          }
      }else{
          alert('fill the form');
      }
  };

  $scope.checkRepeatTodo = function(){
      $scope.todoItems.filter(function(item){
          if($scope.newItem === item.name){
              $scope.test = false;
          }else{
              $scope.test = true;
          }
      });
  };
}]);
  • 0
    кто-нибудь, пожалуйста, помогите

1 ответ

1
Лучший ответ

Проблема $scope.test значением $scope.test, вы переопределяете значение true, когда оно фильтрует третий элемент.

См. Рабочую скрипку

Альтернатива:

Сделайте функцию javascript, а не одну в $ scope, и вызовите эту функцию, если ее действительная запись или нет.

Это устраняет необходимость иметь $scope.test и $scope.checkRepeatTodo поскольку они не $scope.checkRepeatTodo роли.

function checkRepeatTodo() {
  var valid = true;
     $scope.todoItems.filter(function(item){
       if($scope.newItem === item.name){
            return valid = false;
        }
    });
  return valid;
};

И используйте то же самое, что:

if(checkRepeatTodo()){
    $scope.todoItems.push({'name':$scope.newItem});
    $scope.newItem = '';
}
else{
 alert('same todo');
}

Демо здесь

  • 0
    Большое спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню