как проверить в angular js

#javascript #angularjs

#javascript #angularjs

Вопрос:

В следующем приложении я хотел бы показать сообщение об ошибке, если клиент уже существует. Я пытался сделать это, просматривая имена клиентов, но, похоже, это не работает. Другими словами, как я могу проверить, существует ли имя клиента уже с помощью angular js?

Вот что у меня есть на данный момент:

 <script>
  //create an object that ties with module
  // pass an array of dependencies
  var myApp = angular.module('myApp', []); 
  //create controller
  myApp.controller('MainController', function($scope){
    $scope.customers = []; 
    $scope.addCustomer = function(){
      $scope.date = new Date();
      $scope.customers.push({
        name: $scope.customer.name
      });

      for(var i = 0; i < $scope.customers.name.length; i  ) {
        if(customers[i].name == name) {
          alert('Customer already exists'); 
        }
      }     
    };

    $scope.removeCustomer = function(index) {
      $scope.customers.splice(index,1);
    };
  });

</script>
  

Ответ №1:

Я думаю, вы допустили ошибку в for заявлении.

Ваш код

 for(var i = 0; i < $scope.customers.name.length; i  ) { ...
  

Должно быть:

 for(var i = 0; i < $scope.customers.length; i  ) { ...
  

РЕДАКТИРОВАТЬ 1
Я добавил полную версию проверки на основе вашего существующего кода:

 $scope.addCustomer = function() {    
  var isExisted = false;  

  for(var i = 0; i < $scope.customers.length; i  ) {
    if($scope.customers[i].name == $scope.customer.name) {
      isExisted = true;
      break;
    }
  }

  if (isExisted) {
    // inform user
    alert('Customer already exists');
  } else {
    // save new customer
    $scope.customers.push({
      name: $scope.customer.name
    });

    // clear the input, maybe
    $scope.customer = {};
  }
};
  

РЕДАКТИРОВАТЬ 2

Я добавил свои комментарии к вашему коду:

  • В цикле ваша условная логика $scope.customers.name.length неверна. Исправление есть $scope.customers.length . Вы хотите выполнить цикл в массиве $scope.customers , верно?
  • Ваша условная логика для проверки существующего тоже неверна. customers[i].name == name : что такое переменные customers и name ? Они не определены. Я думаю, что они должны быть $scope.customers и $scope.customer.name .
  • После того, как вы нашли существующего клиента, вы должны добавить break оператор. Нет необходимости продолжать цикл, верно?
  • Вам следует улучшить свой стиль кода. Обратите внимание на отступ и точку с запятой.

Комментарии:

1. Г-н Д. Спасибо за помощь, теперь все очень ясно. Я обязательно выполню ваш совет и в будущем. Большое спасибо.

Ответ №2:

Создайте отдельную функцию для проверки и вызовите ее в add функции:

 $scope.addCustomer = function(){
    $scope.date = new Date();

    if (doesCustomerExist($scope.customer.name) == false) {
        $scope.customers.push({
            name: $scope.customer.nam
        });  
    }
}

function doesCustomerExist(name) {
    for (var i = 0; i < $scope.customers.length; i  ) {
        if ($scope.customers[i].name == name) return true;
    }
    return false;
}