2015-12-17 27 views
6

Bir değişken ile bir diziyi karşılaştırıyorum: $scope.object.id ve $scope.groepen.id bir for döngüsü kullanıldıktan sonra bir if ifadesiyle. $scope.object.id tam olarak $scope.groepen.id kimliklerinden biri ile aynıysa, $scope.overlap dizinini doğru yapmalıdır.Diziden döngü yapmak için doğru sonucu döndürmez

$scope.overlap öğesinin doğru olup olmadığını kontrol etmek için kullanıyorum. $scope.overlap öğesinin bir öğesi true olursa, $scope.bestaand değerini true yapar. Else bunu yanlış yapmalı.

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

Benim konsol günlüğü $scope.overlap aslında doğru değerleri gösterir bana gösteriyor (hiçbir şey aynıdır eğer öyleyse, bütün endeksler yanlıştır). Bir şey aynıysa, $scope.bestaand dönüşür, ancak yanlış değerine dönüşmez.

ben onay çalışıp çalışmadığını göstermek için Açısal form doğrulama kullanarak veya burada gösterilen ediyorum: Yanlış Burada ne işim

<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> 

?

Düzenleme:

benim eğer tabloların yerini değiştirdi. Ben aynı olan bir değer girişi var (

enter image description here

O gerçek haline gelmez gibi görünüyor, ama bunun üzerine alır:

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

konsol günlüğü bu bana gösteriyor: Güncelleme kod Burada gösterilen dizinin ikinci değeri olarak). Dizinin LAST değeriyle aynı olan bir değer girersem, çalışır.

+0

nedeni bastaan = false ayarlamayın, o zaman zaten o overlap = true set doğrudur neden $ scope.bestaand' muhtemelen endeksinde bir dizi olmalıdır 'çünkü '$ scope.overlap' her bir eşleşecek döngü – Tomaltach

cevap

3

Sorununuz, if ($scope.overlap[i]) {'u if ($scope.object.id === $scope.groepen[i].id) { içine kapattığınız için $scope.overlap her zaman doğru olacaktır. Bu, $scope.bestaand'un yalnızca true olarak ayarlanacağı veya undefined olarak bırakılacağı anlamına gelir. Ne gerçekten istediğiniz bir -

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

Düzenleme sizin $scope.overlap elemanlarının herhangi biraz farklı bir şey o zaman isteyecektir doğruysa true olarak $scope.bestaand ayarlamak istiyorsanız -

$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

Eğer 'if ($ scope.object.id === $ scope.groepen [i] .id) 'dışında bir onaylama koydum. Bu bana farklı bir sonuç veriyor. "$ scope.bestaand", "$ scope.groepen.id" in son değeri "$ scope.object.id" ile aynıysa true olur. – Johnson

+0

Kodunuzu biraz konsol günlüğü ile uyguladım. $ Scope.bestaand = doğru olduğunda, "işe yarar" mesajını kaydederim. Else, "işe yaramıyor" yazıyor. Konsolumda önce "işe yaramıyor" görüyorum, sonra "işe yarıyor", sonra 9 kez "işe yaramıyor" (muhtemelen dizideki diğer nesnelerden dolayı). – Johnson

+0

@Johnson - Eğer sizi doğru bir şekilde anlayabiliyorsam, herhangi bir '$ scope.overlap 'öğesi doğruysa,' $ scope.bestaand 'öğesini false kullanmak ister misiniz? –

1

Bu başka deyimi erişilemiyor çünkü:

$scope.overlap[i] = true; 

if ($scope.overlap[i]) { 
    $scope.bestaand = true; 
} 
else { 
    console.log('UNREACHABLE'); 
    $scope.bestaand = false; 
} 

Düzenlediğiniz sorularınız için:

$scope.bestaand10'unuz bir hatayı belirtir; bu yüzden, bir kez doğru olmaması gerektiğinde, bir yanlışlık olduğunu varsayalım. Eğer yanlış olarak ayarlayın olgu yoktur

$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

Test ettikten sonra başkalarına ulaşabiliyorum. Konsolum hem $ scope.overlap hem de "scope.bestaand" olarak kaydedildi. Girilen değer, kimliklerden biri ile aynı değilse, $ width.besttaşı'nın tüm değerlerini gösterir, ancak girilen değer aynıysa, "$ scope.bestaand" doğru olmaz. – Johnson

+0

Yanlış olduktan sonra gerçeğe dönüşmelidir. Değerleri karşılaştırıyorum. Değerler aynıysa, doğru olmalıdır. Değerler veya aynı değilse, yanlış olmalıdır. Açısal form doğrulamasını nasıl kullanacağım (farklı bir yol olmadığı sürece). Kodunuzu uyguladım ve aradığım sonucu bana vermiyor. – Johnson

0

çünkü:

Yani aşağıdaki gibi döngü yeniden yazmak gerekir. if ($scope.object.id === $scope.groepen[i].id) örtüşme yanlış ise, her durumda

İlgili konular