287

次のようなjsonオブジェクトまたは配列にng-repeatを簡単に使用できることを私は知っています:

<div ng-repeat="user in users"></div>

ただし、辞書に ng-repeat を使用するにはどうすればよいですか。たとえば、次のようになります。

var users = null;
users["182982"] = "{...json-object...}";
users["198784"] = "{...json-object...}";
users["119827"] = "{...json-object...}";

ユーザー辞書でそれを使用したい:

<div ng-repeat="user in users"></div>

出来ますか?。はいの場合、AngularJs でどのように行うことができますか?

私の質問の例: C# では、次のような辞書を定義します。

Dictionary<key,value> dict = new Dictionary<key,value>();

//and then we can search for values, without knowing the keys
foreach(var val in dict.Values)
{
}

C# のように辞書から値を返す組み込み関数はありますか?

4

4 に答える 4

561

使用できます

<li ng-repeat="(name, age) in items">{{name}}: {{age}}</li>

ngRepeatのドキュメントを参照してください。例: http: //jsfiddle.net/WRtqV/1/

于 2012-08-16T11:37:35.290 に答える
27

また、 AngularJSng-repeatの新しい機能、つまり特別な繰り返しの開始点と終了点についても言及したいと思います。この機能は、単一の親 HTML 要素ではなく、一連の HTML 要素を繰り返すために追加されました。

リピーターの開始点と終了点を使用するには、それぞれng-repeat-startng-repeat-endディレクティブを使用して定義する必要があります。

このng-repeat-startディレクティブは、ディレクティブと非常によく似た働きをしng-repeatます。違いは、すべての HTML 要素 (それが定義されているタグを含む)ng-repeat-endが配置されている終了 HTML タグ ( のタグを含む) まで繰り返されることng-repeat-endです。

サンプルコード (コントローラーから):

// ...
$scope.users = {};
$scope.users["182982"] = {name:"John", age: 30};
$scope.users["198784"] = {name:"Antonio", age: 32};
$scope.users["119827"] = {name:"Stephan", age: 18};
// ...

サンプル HTML テンプレート:

<div ng-repeat-start="(id, user) in users">
    ==== User details ====
</div>
<div>
    <span>{{$index+1}}. </span>
    <strong>{{id}} </strong>
    <span class="name">{{user.name}} </span>
    <span class="age">({{user.age}})</span>
</div>

<div ng-if="!$first">
   <img src="/some_image.jpg" alt="some img" title="some img" />
</div>
<div ng-repeat-end>
    ======================
</div>

出力は次のようになります (HTML スタイルによって異なります)。

==== User details ====
1.  119827 Stephan (18)
======================
==== User details ====
2.  182982 John (30)
[sample image goes here]
======================
==== User details ====
3.  198784 Antonio (32)
[sample image goes here]
======================

ご覧のとおり、ng-repeat-startはすべての HTML 要素を繰り返します ( の要素を含むng-repeat-start)。すべてのng-repeat特別なプロパティ (この場合は$first$index) も期待どおりに機能します。

于 2013-12-17T16:59:52.790 に答える
6

JavaScript 開発者は、上記のデータ構造をディクショナリではなくオブジェクトまたはハッシュと呼ぶ傾向があります。

usersオブジェクトをnullとして初期化しているため、上記の構文は間違っています。コードは次のようになるはずなので、これはタイプミスだと思います。

// Initialize users as a new hash.
var users = {};
users["182982"] = "...";

ハッシュからすべての値を取得するには、for ループを使用して反復する必要があります。

function getValues (hash) {
    var values = [];
    for (var key in hash) {

        // Ensure that the `key` is actually a member of the hash and not
        // a member of the `prototype`.
        // see: http://javascript.crockford.com/code.html#for%20statement
        if (hash.hasOwnProperty(key)) {
            values.push(key);
        }
    }
    return values;
};

JavaScript でデータ構造を使って多くの作業を行う予定がある場合は、underscore.jsライブラリは一見の価値があります。Underscore には、上記のタスクを実行するvaluesメソッドが付属しています。

var values = _.values(users);

私自身はAngularを使用していませんが、ハッシュの値を反復処理するための便利なメソッドが組み込まれていると確信しています(ああ、そうです、Artem Andreevが上記の答えを提供します:))

于 2012-08-16T11:39:29.373 に答える