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 #과 같은 사전에서 값을 반환하는 내장 함수가 있습니까?
답변
당신이 사용할 수있는
<li ng-repeat="(name, age) in items">{{name}}: {{age}}</li>
ngRepeat 설명서를 참조하십시오 . 예 : http://jsfiddle.net/WRtqV/1/
답변
또한 AngularJSng-repeat
의 새로운 기능 , 즉 특수 반복 시작 및 종료 지점에 대해서도 언급하고 싶습니다 . 이 기능은 단일 상위 HTML 요소 대신 일련 의 HTML 요소 를 반복하기 위해 추가되었습니다 .
리피터 시작점과 종료점을 사용하려면 ng-repeat-start
및 ng-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
)도 예상대로 작동합니다.
답변
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는 위의 답변을 제공합니다 :)).
답변
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>