2013-08-26 1 views
7
とJSON配列の出力要素に

JSON配列は、スコープで定義された方法:AngularJS

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

HTML:

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

出力:

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

私が欲しいの出力が見てlike:

Question 1 - Answer1 
Question 2 - Answer2 
それが動作するはずのようにそれはそうどの

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

...しかし、それはしていません。

答えて

12

スコープ内のjson配列を次のように変更します。

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

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

あなたの意見では、

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

完璧です。私は代わりを好む:

{{question}} - {{answer}}
、これはキー/値を追加する必要はありませんが、私はこれがより拡張可能で、質問に答えることに近いと思います。 –

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


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

質問が動的な値である場合、これは落ちます。これは重大ではない例の場合です。 –

8

により、それはアレイ内であることに、あなたは、各オブジェクトのキー値をループしています。

代わり

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

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

:あなただけの単純なオブジェクトがある場合

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

をあなたは

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

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

0123第二の反復を避けることができ
0

あなたはECMA5準拠したブラウザを使用している場合、あなたは、もちろん

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

を試みることができるあなたのオブジェクトは1つのだけのキーを持っている場合、これが唯一確実に動作します。複数のキーがある場合は、キー名を取得するフィルタ関数を記述し、関連するキーを抽出することができます。

+0

働いているうちに、私はそれが簡潔で読みやすいことからは遠いと感じます。あなたも気づいたことがあるので、無関係なキーをオブジェクトに追加すると、このngRepeatが破損します。これは良いデザインではないことを意味します。 – Majki