#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;
}