2016-10-13 7 views
0

Ich Verweise auf einen Wert in meinem Controller, der eine Zeichenfolge oder ein Array sein kann. Wenn es ein Array ist, möchte ich "ng-repeat" (wahrscheinlich) verwenden, um meine Artikel aufzulisten.Wiederholen, wenn Array, Anzeige, wenn Zeichenfolge

Wenn es eine Zeichenfolge ist, möchte ich nur die Zeichenfolge anzeigen.

Etwas wie:

<div> 
    {{if is array}} 
     <span ng-repeat="v in myvalue">{{v}}</span> 
    {{else}} 
     {{myvalue}} 
    {{endif}} 
</div> 

Ich frage mich, ob es eine elegante Art und Weise ist das in AngularJS zu tun, dass ich einfach noch nicht vertraut sind.

Dank

Antwort

1

Es gibt angular.isArray Methode. Sie können das verwenden. Sie müssen es in den den Rahmen setzen oder vm:

$scope.isArray = angular.isArray 

Und in HTML

<span ng-repeat="v in myvalue" ng-if="isArray(myvalue)">{{v}}</span> 
<span ng-if="!isArray(myvalue)">{{myvalue}}</span> 

Wenn Sie es in mehr als einem Ort verwenden, am besten für eine Richtlinie zu gehen.

+0

Was ist mit dem 'if' in der Interpolation? Wie schafft das die erwartete Ausgabe? – charlietfl

+0

@charlietfl Winkel kann Bedingungen interpolieren. – jusopi

+0

@jusopi in Ordnung, aber würde nicht die erwarteten Ergebnisse auf diese Weise produzieren ... es tut jetzt nach Bearbeitung – charlietfl

1

Sie die Logik auf dem Controller (zuweisen an eine andere Variable für Array und String) - dann tut nur die stumme Logik in der Ansicht:

if (Array.isArray($scope.myvalue)) { 
    $scope.myArray = $scope.myvalue; 
} else { 
    $scope.myString = $scope.myvalue; 
} 

Und der Blick

<div> 
    <div ng-if="myArray"> 
     <span ng-repeat="v in myArray">{{v}}</span> 
    </div> 
    <div ng-if="myString"> 
     {{myString}} 
    </div> 
</div> 
1

machen eine einfache Getter

$scope.getVal = function(vals){ 
    if(Array.isArray(vals)) return vals 
    else return [ vals ] 
} 

dann statt ng-wenn UND ng-repeat nur den Repeater verwenden, wie Sie normalerweise tun würde.

<div ng-repeat="val in getVal(vals)"> {{ val }} </div> 
+0

Es gibt eine Nuance für meine spezielle Situation, in der das nicht funktionieren wird, aber ich kann sehen, wie es in anderen sein würde. Upvote –

+0

Können Sie die Besonderheiten erklären? – jusopi

+0

Ich wickle tatsächlich die Array-Elemente in ein anderes Element, das nicht mit dem String-Wert vorhanden ist, da es eine zusätzliche Benutzerinteraktion mit den vom Array erstellten Elementen gibt. –

Verwandte Themen