AngularJS中validation.isElementInArray()方法的工作原理是什么?
关于AngularJS中
validation.isElementInArray()方法的工作原理及你的代码分析 让我来帮你拆解这个方法的逻辑,还有你的代码里它的作用~
一、validation.isElementInArray()的核心工作方式
这个方法本质是一个数组元素存在性检查工具,逻辑非常直接:
- 它接收两个参数:第一个是你要检查的目标元素(比如你的
$scope.inputBox),第二个是要搜索的数组(比如你的$scope.comments) - 内部会遍历目标数组,把每个元素和你传入的待检查元素做匹配(默认一般是严格相等
===,如果是自定义的validation工具,也可能是你自己实现的匹配规则) - 遍历结束后,返回一个布尔值:找到匹配元素就返回
true,没找到就返回false
二、你的代码逻辑分析
先看你写的代码:
if( validation.isElementInArray($scope.inputBox, $scope.comments) ) { $scope.error_msg = " "; $scope.comments.push($scope.inputBox); $scope.inputBox = ''; } else { $scope.error_msg = "Name can't be Same"; }
这里有个逻辑反了的问题:
你原本想要实现的是「如果输入的名称没重复,就添加到数组;重复了就提示错误」,但当前代码的逻辑是如果输入内容已经在数组里,才执行添加操作,这和你的需求完全相反啦!
三、修正后的正确代码
只需要给判断条件加个取反运算符!,就能实现你想要的逻辑:
if( !validation.isElementInArray($scope.inputBox, $scope.comments) ) { $scope.error_msg = ""; // 这里把空格改成空字符串更合理 $scope.comments.push($scope.inputBox); $scope.inputBox = ''; } else { $scope.error_msg = "Name can't be Same"; }
这样逻辑就通顺了:
- 当
validation.isElementInArray()返回false(输入内容不在数组里),就清空错误提示,把内容加入数组,再清空输入框 - 当返回
true(内容重复),就显示「Name can't be Same」的错误提示
四、额外注意点
如果这个validation是你自己封装的工具,要留意内部的匹配规则:
- 如果你的
$scope.comments数组存的是对象(比如{name: 'xxx'}),而不是单纯的字符串,那直接对比元素就会失效,需要修改isElementInArray方法,让它根据对象的某个属性(比如name)来做匹配判断。不过从你的代码来看,应该是字符串数组,所以当前逻辑没问题。
内容的提问来源于stack exchange,提问作者Vivek K
相关产品推荐
相关产品推荐

