angularjs (1.x)를 사용하여 HTML 요소의 id 속성을 동적으로 설정하는 방법은 무엇입니까?


답변:


392

ngAttr 지시문은 공식 문서에 소개 된 것처럼 여기에서 완전히 도움이 될 수 있습니다.

https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes

예를 들어, 색인을 포함하도록 요소 의 id속성 값 을 설정하려면 div뷰 단편에

<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>

보간되는

<div id="object-1"></div>

1
어디 myScopeObject에서 왔습니까? 어디서 정의해야합니까?
Jan Aagaard

1
@JanAagaard 컨트롤러를 사용하여 노출 된 객체 myScopeObject의 속성 이라고 가정하자 scope. docs.angularjs.org/guide/controller 도 참조하십시오 . 그것이 당신에게 충분합니까, 아니면 더 자세히 설명할까요?
Thierry Marianne

난 = "{{ '패널'+ file.Id}}"- ATTR-ID를 겨 않았다하지만 ID = 나에게 "Panel12312":( 생성하지 않습니다
마누엘 Maestrini

17
다음 두 가지 동작이 동일하지 않습니다. <div id="{{ 'object' + index }}"><div ng-attr-id="{{ 'object' + index }}">? 문서에서 앞에 붙는 ng-attr-것은 요소가 아닌 비표준 요소 인 경우를 돕는 것입니다 <div>. 내가 문서를 제대로 읽고 있습니까?
broc.seib

3
nd-attr을 사용한 @ broc.seib는 표준에 관한 것만이 아닙니다. 이것은 HTML 인터프리터가 각도가로드되기 전에 요소에 id를 할당 할 수 있기 때문에 좋습니다. 그리고 ng-attr은 각도가로드 될 때만 요소에 id를 할당합니다. <img> 태그에서 ng-src의 경우도 마찬가지입니다.
Alex

70

이 일은 저에게 아주 효과적이었습니다.

<div id="{{ 'object-' + $index }}"></div>


시간이 흐르면서 아마도 가장 직관적 인 구문이 예상대로 작동합니다. 목록을 반복하는 동안 문제가 발생한 것을 기억합니다.
Thierry Marianne

2
이 경우 90 %의 경우에는 올바르게 작동하지만 디버깅하기 어려운 오류가 발생할 수 있습니다. 대신 ng-attr-id를 사용해야합니다.
Baki

ng-attr-id상황의 0 %에서 유리합니다. 예제가 없으므로 제공 할 수 없습니다.
omikes

5
ng-attr-id방법은 원시 NG 식을 (예를 들어, 유효한 HTML 속성에 렌더링되지 않습니다 있도록하는 것입니다 id, label등). 이것은 '정크'를 읽는 다운 스트림 사용을 중지하는 것입니다 (예 : 렌더링이 완료되기 전 또는 js 충돌 후)
Overflew

34

이 질문에 왔지만 최신 Angular 버전> = 2.0 과 관련이있는 경우 .

<div [id]="element.id"></div>

2
유용하지 않다. 문제는 AngularJS와 관련이있다
btk

8
나는 동의한다; 유용한 멤버들에게만 유용 할 것입니다.
SoEzPz

16
일부 회원은 Angular 링크를 검색하더라도 Angularjs 링크를 계속 클릭합니다. 약간 혼란스럽고 오류가 계속 발생합니다.
SoEzPz

24

이 동작을 달성하는 더 우아한 방법은 다음과 같습니다.

<div id="{{ 'object-' + myScopeObject.index }}"></div>

내 구현을 위해 ng-repeat의 각 입력 요소에 레이블을 연결할 고유 ID가 필요했습니다. 따라서 myScopeObjects에 포함 된 객체 배열의 경우 다음을 수행 할 수 있습니다.

<div ng-repeat="object in myScopeObject">
    <input id="{{object.name + 'Checkbox'}}" type="checkbox">
    <label for="{{object.name + 'Checkbox'}}">{{object.name}}</label>
</div>

이와 같이 콘텐츠를 동적으로 추가 할 때 고유 한 ID를 즉석에서 생성 할 수 있으면 매우 유용 할 수 있습니다.


이 접근법에는 문제가 있다고 생각합니다. 페이지가로드 된 후 각도 바인딩을 초기화하고 있습니다. 이제 때로는 div가 제대로로드되지 않고 다른 div의 id 충돌로 인해 추측됩니다.
sumeet 2016 년

흥미 롭군 플런저 예제에서 행동을 재현 할 수 있다면 기꺼이 확인해 보겠습니다. 'ng-attr-id ='를 사용하고 'id ='를 사용하지 않습니까?
Cumulo Nimbus 2016 년

9

당신은 단순히 다음을 할 수 있습니다

당신의 js에서

$scope.id = 0;

템플릿에서

<div id="number-{{$scope.id}}"></div>

렌더링됩니다

<div id="number-0"></div>

이중 중괄호 안에 연결할 필요는 없습니다.



0

이 구문을 사용하는 경우 :

<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>

Angular는 다음과 같이 렌더링합니다 :

 <div ng-id="object-1"></div>

그러나이 구문은 다음과 같습니다.

<div id="{{ 'object-' + $index }}"></div>

다음과 같은 것을 생성합니다 :

<div id="object-1"></div>

6
무슨 말을하는지 설명해주세요.
Kumar

6
왜 .. 를 ng-attr-id만들어야 ng-id합니까? 그건 틀렸어요. 누가 이것을지지하는지 궁금합니다.
TJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.