AngularJ에서 사전에 ng-repeat를 사용하는 방법은 무엇입니까?


285

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>

가능합니까?. 그렇다면 AngularJ에서 어떻게 할 수 있습니까?

내 질문의 예 : 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 #과 같은 사전에서 값을 반환하는 내장 함수가 있습니까?


1
사전과 JSON 객체의 차이점은 무엇입니까? 나는 자바 스크립트가 없다고 생각합니다!
markmarijnissen

8
@markmarijnissen : JSON 객체에는 JavaScript 객체보다 엄격한 구문 규칙이 있습니다. 우리가 이미 Pedant 's Corner에 있듯이 JavaScript에는 "사전"과 같은 것이 없습니다. 우리는 그것들을 객체라고 부릅니다.
Paul D. Waite

답변:


556

당신이 사용할 수있는

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

ngRepeat 설명서를 참조하십시오 . 예 : http://jsfiddle.net/WRtqV/1/


53
이것은 내가 요구 한 것이 아니라 내가 원하는 것입니다. 감사합니다 Artem Andreev
Vural

1
이 ng-repeat에서 필터를 어떻게 사용할 수 있습니까? 검색 필터를 사용할 때 제 경우에는 작동하지 않습니다. <input type = "text"ng-model = "searchText"/> <li ng-repeat = "(이름, 연령) 항목 | filter : searchText"> {{name}} : {{age}} </ li> ...
Shekhar

1
@Shekhar Filter "filter"는 배열에서만 작동합니다. 기능 요청을 작성할 수 있습니다.
Artem Andreev

2
python과의 공통점을 만나서 반가워 :)
robert king

4
ng-if 문을 사용하여 사전 (객체)에서도 필터 기능을 사용할 수 있습니다. 예를 들면 다음과 같습니다. <li ng-repeat = "(id, obj) in items"ng-if = 'obj.sex = "female " '> {{obj.name}} {{obj.surname}} </ li> ... 여기서 items는 일부 키에 의해 색인화 된 개인 집합입니다.
giowild

27

또한 AngularJSng-repeat 의 새로운 기능 , 즉 특수 반복 시작종료 지점에 대해서도 언급하고 싶습니다 . 이 기능은 단일 상위 HTML 요소 대신 일련 의 HTML 요소 를 반복하기 위해 추가되었습니다 .

리피터 시작점과 종료점을 사용하려면 ng-repeat-startng-repeat-end지시문을 각각 사용하여 정의해야합니다 .

ng-repeat-start지시어는 매우 유사 작동 ng-repeat지시어. 차이점은 모든 HTML 요소 (정의 된 태그 포함)를 ng-repeat-end배치 할 끝 HTML 태그 (로 태그 포함 )까지 모든 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)도 예상대로 작동합니다.


오류 : [$ compile : uterdir] 종료되지 않은 속성, 'ng-repeat-start'가 발견되었지만 일치하는 'ng-repeat-end'가 없습니다.
zloctb

@zloctb <div ng-repeat-end>..</div>마크 업에서 건너 뛰었 을 것입니다
John Kaster

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 라이브러리를 살펴볼 가치가 있습니다. 밑줄에는 위의 작업을 수행 하는 values방법 이 있습니다.

var values = _.values(users);

나는 Angular를 직접 사용하지 않지만 해시 값을 반복하기위한 편리한 메소드 빌드가있을 것이라고 확신합니다 (아, 거기에 있습니다, Artem Andreev는 위의 답변을 제공합니다 :)).


1
underscore.js 및 이러한 유용한 정보는 +1입니다. 조니 감사합니다!
Vural

0

Angular 7에서는 다음과 같은 간단한 예제가 작동합니다 (사전이이라는 변수에 있다고 가정 d).

my.component.ts :

keys: string[] = [];  // declaration of class member 'keys'
// component code ...

this.keys = Object.keys(d);

my.component.html : (키 : 값 쌍의 목록을 표시합니다)

<ul *ngFor="let key of keys">
    {{key}}: {{d[key]}}
</ul>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.