2015-12-17 10 views
6

変数を配列と比較すると、forループを使用した後にifステートメントを持つ$scope.object.id$scope.groepen.idが表示されます。 $scope.object.id$scope.groepen.idのIDのいずれかとまったく同じ場合は、$scope.overlapのインデックスをtrueにする必要があります。配列をループすると正しい結果が返されない

$scope.overlapのいずれかがtrueであるかどうかを確認するために別のものを使用しています。 $scope.overlapのいずれかの要素がtrueの場合、$scope.bestaandがtrueになります。そうでなければ、それは間違っているはずです。

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が実際に正しい値を(何も同じではありませんので、もし、すべてのインデックスが偽である)を示していていることを私に示しています。 $scope.bestaandは、何かが同じであればtrueになりますが、falseには戻っていません。

私はチェックはここに示す作業されているかどうかを示すために、角度フォーム検証を使用しています:私はここで間違って

<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文の場所を変更しました。私は、同じ値の入力を持っている(

enter image description here

真になるんようだが、それは上書きされます:

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") 
    } 
} 

コンソールログは、この私を示しています。更新されたコードは、ここに示されています配列の2番目の値)。配列の最後の値と同じ値を入力した場合、それは機能します。

+0

の$ scope.bestaan​​d'は、おそらくのインデックスで配列する必要があります 'ので、ある理由でbastaan = falseを設定していない、真でありますそれぞれの '$ scope.overlap'にマッチするループ。 – Tomaltach

答えて

3

あなたの問題はif ($scope.overlap[i]) {if ($scope.object.id === $scope.groepen[i].id) {の中に入れたので、$scope.overlapは常に真実です。つまり、$scope.bestaandtrueに設定するか、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.overlap要素のいずれかに該当する場合はtrueに$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.bestaand) { 
    if ($scope.overlap[i]) { 
     $scope.bestaand = true; 
    } 
    } 
} 
+0

私は' if($ scope.object.id === $ scope.groepen [i] .id) 'の外側にifチェックを入れました。これは私に別の結果をもたらします。 '$ scope.bestaan​​d'は' $ scope.groepen.id'の最後の値が '$ scope.object.id'と同じ場合にのみ真となります。 – Johnson

+0

私はあなたのコードを少しのコンソールロギングで適用しました。 '$ scope.bestaan​​d' =真であれば、「動く」と記録します。それ以外の場合は「動作しません」と記録します。私のコンソールでは、まず「動作しません」というメッセージが表示され、次に「動作します」というメッセージが記録され、9回「動作しません」(おそらくアレイ内の他のオブジェクトが原因です) – Johnson

+0

@ジョンソン - あなたが正しく理解していれば、 '$ scope.overlap'要素が真であれば' $ scope.bestaan​​d'をfalseにしたいと思っていますか? –

1

をは、それ以外の場合はが到達不能です:

$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; 
    } 
} 
+0

テスト後、私のelseに到達します。コンソールには '$ scope.overlap'と' $ scope.bestaan​​d'の両方が記録されています。入力された値がIDの1つと同じでない場合、 '$ scope.overlap'のすべての値がfalseですが、入力された値が同じであれば' $ scope.bestaan​​d'はtrueになりません。 – Johnson

+0

偽になったら真実になるはずです。私は値を比較する。値が同じであれば、真であるはずです。値が同じでなければ、それは偽になるはずです。これは、Angularフォームの検証を使用する方法です(別の方法がない限り)。あなたのコードを適用しましたが、私が探している結果が得られません。 – Johnson

0

をfalseに設定する一切ケースはありませんので。 if ($scope.object.id === $scope.groepen[i].id)は、すでにoverlap = trueそれを設定し、オーバーラップがfalseの場合は、その後、あなたはどのような場合

関連する問題