2013-08-26 10 views
7

JSON matrice definito nel campo di applicazione:Come elementi di uscita in un array JSON con AngularJS

$scope.faq = [ 
     {"Question 1": "Answer1"}, 
     {"Question 2": "Answer2"} 
    ]; 

HTML:

<div ng-repeat="f in faq"> 
    {{f}} 
</div> 

uscita:

{"Question 1": "Answer1"} 
{"Question 2": "Answer2"} 

Quello che voglio uscita a guardare Mi piace:

Question 1 - Answer1 
Question 2 - Answer2 

Come sembra come dovrebbe funzionare:

<div ng-repeat="f in faq"> 
    {{f.key}}-{{f.value}} 
</div> 

... ma non è così.

risposta

12

Cambia l'array JSON in scope come;

$scope.faq = [ 
     {key: "Question 1", 
     value: "Answer1"}, 

     {key: "Question 2", 
     value: "Answer2"} 
    ]; 

E a tuo avviso;

<div ng-repeat="f in faq"> 
    {{f.key}}-{{f.value}} 
</div> 
+0

Perfetto, questo funziona. Mi piace l'alternativa:

{{question}} - {{answer}}
, che non richiede l'aggiunta di chiave/valore, ma penso che sia più estensibile e più vicino a rispondere alla domanda. –

0
$scope.faq = [ 
    "Answer1", 
    "Answer2" 
]; 


<div ng-repeat="answer in faq"> 
    Question {{$index+1}}-{{answer}} 
</div> 
+0

Questo cade quando la domanda è un valore dinamico, che è nel caso di esempio non banale. –

8

dovuto al fatto che è all'interno di una matrice, si dovrà scorrere i valori principali di ciascun oggetto.

http://fiddle.jshell.net/TheSharpieOne/QuCCk/

<div ng-repeat="value in faq"> 
    <div ng-repeat="(question,answer) in value"> 
     {{question}} - {{answer}} 
    </div> 
</div> 

alternativa:
Se avete solo un semplice oggetto:

$scope.faq = { 
    "Question 1": "Answer1", 
    "Question 2": "Answer2" 
}; 

si poteva evitare la seconda ripetizione

<div data-ng-repeat="(question,answer) in faq"> 
     {{question}} - {{answer}} 
</div> 

http://fiddle.jshell.net/TheSharpieOne/D3sED/

0

Se si utilizza ECMA5 browser compatibili, si potrebbe provare,

<div ng-repeat="f in faq"> 
    {{Object.keys(f)[0]}}-{{f[Object.keys(f)[0]]}} 
</div> 

Naturalmente, questo funziona solo in modo affidabile se l'oggetto ha solo 1 chiave. Se ha più di una chiave, la soluzione migliore è scrivere una funzione filtro che ottenga i nomi delle chiavi, che è possibile utilizzare per estrarre le chiavi pertinenti.

+0

Mentre lavoro, trovo che sia lungi dall'essere conciso e leggibile. Come hai anche notato te stesso - l'aggiunta di chiavi non correlate al tuo oggetto interromperà questo ngRepeat, il che significa che non è un buon progetto. – Majki