2016-03-23 14 views
0

Ich habe zwei Direktiven, die basierend auf einer konfigurierten Variable angezeigt werden.Angular ng-show Umgang mit undefinierten Variablen

Dies funktionierte visuell, aber während der Abnahmetests fand ich ein Problem. Ich versuchte zu behaupten, dass, wenn die <settingElement> nicht angeklickt wurde (Konfigurieren der), keine Direktive angezeigt wird. Der Test bestanden für <directiveA> aber für <directiveB> gescheitert, was mich ein wenig verwirrt.

Ein Beispiel für den Code ist unten:

<settingElement ng-click="selected = trueOrFalse()"></settingElement> 

<directiveA ng-show="selected"></directiveA> 
<directiveB ng-show="!selected"></directiveB> 
+0

Können Sie uns Ihren gesamten Anweisungscode zeigen? Oder noch besser, geben Sie uns einen Plünderer? – amanuel2

+0

Ich denke es ist, weil, wenn 'settingElement' nicht angeklickt' ausgewählt = undefined' und innerhalb 'directionalB' ng-show Ausdruck erhalten, weil in JavaScript'! Undefined = true' – Grievoushead

+0

Danke Grievoushead! Sie haben mir geholfen, die Antwort zu finden, werde ich unter – Matthew

Antwort

0

Erfolg! Zumindest irgendwie, visuell funktioniert der Code so, anstatt für isDisplayed zu testen, behauptete ich einfach, dass die Höhe und die Breite beide 0 sind ... nicht ideal, aber funktioniert.

0

Wahrscheinlich ein besserer Weg, dies zu tun wäre selected in einem Elternteil beider Elemente zu definieren, wie zum Beispiel:

<div ng-init="selected = false;"> 
    <settingElement ng-click="selected = true"></settingElement> 

    <directiveA ng-show="selected"></directiveA> 
    <directiveB ng-show="!selected"></directiveB> 
</div> 

Eine weitere „kürzere Abhilfe“

<settingElement ng-click="selected = true"></settingElement> 

<directiveA ng-show="!!selected"></directiveA> 
<directiveB ng-show="!selected"></directiveB> 
+0

Sorry sollte klarer sein, klicken Das 'settingElement' garantiert kein bestimmtes Ergebnis, so dass keine Vermutungen darüber gemacht werden können. – Matthew

+0

Klingt nach ziemlich schlechtem Design für mich – nrausch

+0

Bitte erklären Sie es. Der Code selbst funktioniert ... Anfangs ist nichts sichtbar und je nach Aufruf wird eine Erfolgs- oder Fehlschlagmeldung angezeigt. Es ist der Test, der 'isDisplayed' bestätigt, der fehlschlägt – Matthew

0

wäre Es ist wahrscheinlich aufgrund des Ausdrucks Triggerung mit undefinierten Werten

versuchen Sie mit ng-if ="selected" or ng-show="selected==true"