在使用for循环后,我正在使用if语句将变量与数组进行比较:$scope.object.id
和$scope.groepen.id
。如果$scope.object.id
与$scope.groepen.id
的其中一个ID完全相同,那么它应该使$scope.overlap
的索引为true。
如果检查$scope.overlap
是否为真,我正在使用另一个。如果$scope.overlap
的一个元素为真,则$scope.bestaand
为真。否则它应该是假的。
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
$scope.bestaand = false;
}
}
else {
$scope.overlap[i] = false;
}
}
我的控制台日志向我显示$scope.overlap
确实显示了正确的值(因此,如果没有相同的内容,则所有索引都为false)。如果某些东西是相同的,$scope.bestaand
确实变为真,但它不会变回假。
我正在使用Angular表单验证来显示检查是否正常工作:
<div class="col-md-3" ng-class="{ 'has-error' : bestaand }">
<label class="control-label" for="textinput">Groepsnaam</label>
<input id="groepen" name="groepen" type="text" class="form-control input-md" ng-model="object.id" ng-minlength="4" ng-maxlength="16" ng-change="checkOverlap()" required>
<p ng-show="bestaand" class="help-block">Deze groepsnaam bestaat al!</p>
</div>
我在这里做错了什么?
编辑:
我已经改变了我的if语句的位置。更新后的代码如下:
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i]) {
$scope.bestaand = true;
console.log("works")
}
else {
$scope.bestaand = false;
console.log("doesnt work")
}
}
控制台日志向我显示:
它似乎确实成了现实,但它被覆盖(我输入的值与数组的第二个值相同)。如果我输入的值与数组的最后一个值相同,则确实有效。
答案 0 :(得分:3)
您的问题是,if ($scope.overlap[i]) {
在if ($scope.object.id === $scope.groepen[i].id) {
内已$scope.overlap
,所以$scope.bestaand
将永远为真。这意味着true
只能设置为undefined
或保留为for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
$scope.bestaand = false;
}
}
。你真正想要的是 -
$scope.bestaand
修改强>
如果您想将$scope.overlap
元素设置为真,那么您需要一些不同的东西 -
$scope.bestaand = false;
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if(!$scope.bestaand) {
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
}
}
答案 1 :(得分:1)
这是因为 else 语句无法访问:
$scope.overlap[i] = true;
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
console.log('UNREACHABLE');
$scope.bestaand = false;
}
至于你编辑过的问题:
你的$scope.bestaand
表示错误,所以我认为如果它永远不是真的那就是假的。
所以你需要按如下方式重写你的循环:
$scope.bestaand = false;
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
} else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i] && !$scope.bestaand) {
$scope.bestaand = true;
}
}
答案 2 :(得分:0)
因为没有你把它设置为false的情况。
if ($scope.object.id === $scope.groepen[i].id)
为真,那么您已设置overlap = true
,如果重叠为假,则无论如何都不设置bastaan = false