в моем списке 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; } }); }; }]);
Проблема $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');
}