2016-05-21 12 views
1

Ich habe folgende Situation:Anzeige Standardwert, wenn nicht in ng-repeat findet

<div ng-repeat="field in model.Fields">    
     <div class="col-xs-2"> 
      {{field.Code}} 
     </div> 
     <div class="col-xs-2"> 
      {{field.Name}} 
     </div>     
     <div class="col-xs-2"> 
      <div class="aaa" ng-repeat="(key, value) in model.FieldSemantics"> 
       <span ng-click=""> 
        <enum-name-display ng-if="field.Code == key" value="value" values="@Html.ValuesForEnum(typeof(FieldRoleEnum))"></enum-name-display>         
       </span>       
      </div> 
     </div> 
    </div> 

model.Fields Array ist

model.FieldSemantics ist ein Objekt, in dem Schlüssel zum Code des Feldes gleich und Wert, der Enum-Wert entspricht.

Ich wollte den Wert von enum zeigen, wenn field.Code gleich Schlüssel ist. Es funktioniert gut, aber für einige Felder in Array gibt es kein gleiches (Schlüssel, Wert) Paar in model.FieldSemantics. Für diesen Fall möchte ich den Standardwert f.ex. Strich "-". Ich habe keine Ahnung, wie ich es lösen soll.

Beispiel json:

 "Fields": [ 
       { 
        "Code": "field1", 
        "Name": "Field 1", 
       }, 
       { 
        "Code": "field2", 
        "Name": "Field 2", 
       }, 
       { 
        "Code": "field3", 
        "Name": "Field 3", 
       }, 
       { 
        "Code": "field4", 
        "Name": "Field 4", 
       }, 
       { 
        "Code": "field5", 
        "Name": "Field 5", 
       }, 
      ] 
    "FieldSemantics": { 
     "field1": 0, 
     "field3": 1, 
     "field5": 2 
    }, 

Antwort

2

Nur Aufzählungen innerhalb Ihrer ng-repeat haben. Verwenden Sie die erste im Grunde wie Sie sind und auf der zweiten verwenden Sie etwas wie: ng-if="! field.Code == key"

+0

Du meinst etw so: 'ng-if ="! (Field.Code == key) "'. Es funktioniert nicht richtig, da so viele Bindestriche erzeugt werden, wie es Elemente in model.FieldSemantics gibt. – user6341612

+0

Der ng-if-Ausdruck könnte etwas abweichen, aber das Konzept ist korrekt. Wenn Sie JSON zu Ihrer Frage hinzufügen möchten, kann ich Ihnen den genauen Ausdruck geben. –

+0

Ich habe das Beispiel JSON hinzugefügt, weil ich jetzt keinen Zugriff auf Ressourcen habe, aber gegeben JSON spiegelt die Situation wider. So wie Sie für Feld2 und Feld4 sehen können, gibt es keinen entsprechenden Schlüssel in FieldSemantics-Objekt. Also für diese Felder möchte ich Dash anzeigen. Für andere zeige ich den Wert entsprechend dem Enum-Wert an, aber das wird mit 'ng-if = "field.Code == key" 'gemacht – user6341612

1

Ich habe es auf andere Weise ausgearbeitet. Ich hinzugefügt:

<enum-name-display ng-if="field.Code == key" value="role(field.Code)" values="@Html.ValuesForEnum(typeof(FieldRoleEnum))"></enum-name-display> 

Diese:

value="role(field.Code)" 

und entsprechende Funktion in Abfrage hinzu:

$scope.role = function (code) { 
    var fieldSemanticsObj = $scope.model.FieldSemantics; 
    var value = 4; // default value 
    if (fieldSemanticsObj.hasOwnProperty(code)) 
    { 
     value = fieldSemanticsObj[code]; 
    } 
    return value;   
} 

Vielleicht es ist nicht die beste Lösung gewünschtes Ergebnis zu erzielen, aber es funktioniert:)