Làm cách nào để thiết lập thuộc tính id của phần tử HTML một cách linh hoạt với angularjs (1.x)?


Câu trả lời:


392

ngAttr Chỉ thị hoàn toàn có thể giúp đỡ ở đây, như được giới thiệu trong tài liệu chính thức

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

Chẳng hạn, để đặt idgiá trị thuộc tính của một divphần tử, để nó chứa chỉ mục, một đoạn xem có thể chứa

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

mà sẽ được nội suy để

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

1
Nơi nào myScopeObjectđến từ đâu? Tôi sẽ định nghĩa nó ở đâu?
Jan Aagaard

1
@JanAagaard Chúng ta hãy giả sử myScopeObjectlà một thuộc tính của một scopeđối tượng được phơi bày bằng bộ điều khiển. Vui lòng xem thêm docs.angularjs.org/guide/controll . Điều đó có đủ rõ ràng cho bạn hay tôi sẽ giải thích thêm?
Thierry Marianne

tôi đã ng-attr-id = "{{ 'Panel + file.Id}}", nhưng nó không tạo ra id = "Panel12312" cho tôi :(
Manuel Maestrini

17
Không phải hai hành vi giống hệt nhau sau đây: <div id="{{ 'object' + index }}"><div ng-attr-id="{{ 'object' + index }}">? Các tài liệu dường như nói rằng việc chuẩn bị trước ng-attr-là để giúp đỡ trong trường hợp phần tử là một cái gì đó không chuẩn, giống như không phải là a <div>. Tôi đang đọc tài liệu phải không?
broc.seib

3
@ broc.seib sử dụng nd-attr không chỉ về tiêu chuẩn. Đây là cách thực hành tốt vì trình thông dịch HTML có thể gán id cho phần tử trước khi góc được tải. Và ng-attr đảm bảo chỉ định id cho phần tử khi góc được tải. tương tự là trường hợp cho ng-src trong thẻ <img>.
Alex

70

Điều này làm việc cho tôi khá tốt:

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


Thời gian trôi nhanh và có lẽ, cú pháp trực quan nhất bây giờ chỉ hoạt động như mong đợi. Tôi nhớ có một số vấn đề trong khi lặp qua một danh sách.
Thierry Marianne

2
Điều này sẽ hoạt động chính xác trong 90% các trường hợp nhưng đôi khi bạn có thể gặp lỗi khó gỡ lỗi. Bạn nên sử dụng ng-attr-id thay thế.
Baki

ng-attr-idlà lợi thế trong 0% các tình huống. Không có ví dụ có thể được cung cấp, bởi vì không có.
omike

5
Các ng-attr-idphương pháp là để đảm bảo rằng sự biểu hiện ng nguyên không bao giờ được kết xuất trong một thuộc tính HTML hợp lệ (ví dụ id, label, vv). Điều này là để ngăn chặn bất kỳ việc sử dụng xuôi dòng nào khi đọc ng 'rác' (ví dụ: trước khi kết xuất hoàn tất hoặc sau khi sự cố js)
Overflew

34

Trong trường hợp bạn đến câu hỏi này nhưng liên quan đến phiên bản Angular mới hơn > = 2.0 .

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

2
Điều đó không hữu ích, câu hỏi nằm trong bối cảnh của AngularJS
btk

8
Tôi đồng ý; nó sẽ chỉ hữu ích cho những thành viên thấy nó hữu ích.
SoEzPz

16
Một số thành viên vẫn nhấp vào liên kết Angularjs mặc dù họ đang tìm kiếm liên kết Angular. Đó là một chút bối rối và lỗi sẽ tiếp tục xảy ra.
SoEzPz

24

Một cách thanh lịch hơn tôi tìm thấy để đạt được hành vi này chỉ đơn giản là:

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

Để thực hiện, tôi muốn mỗi phần tử đầu vào lặp lại cho mỗi phần tử có một id duy nhất để liên kết nhãn. Vì vậy, đối với một loạt các đối tượng có trong myScopeObjects, người ta có thể làm điều này:

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

Có thể tạo id duy nhất một cách nhanh chóng có thể khá hữu ích khi tự động thêm nội dung như thế này.


Tôi nghĩ rằng phương pháp này có vấn đề. Tôi đang khởi tạo liên kết góc sau khi trang được tải. Bây giờ đôi khi div không tải đúng cách mà tôi đoán là do xung đột của id của div khác nhau.
sumeet

Hấp dẫn. Nếu bạn có thể tái tạo hành vi của mình trong một ví dụ về plunker, tôi sẽ vui lòng kiểm tra nó. Có sử dụng 'ng-attr-id =' và chỉ sử dụng 'id =' không?
Cumulo Nimbus

9

Bạn chỉ có thể làm như sau

Trong js của bạn

$scope.id = 0;

Trong mẫu của bạn

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

cái nào sẽ kết xuất

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

Không cần thiết phải nối bên trong dấu ngoặc kép.



0

Nếu bạn sử dụng cú pháp này:

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

Angular sẽ kết xuất một cái gì đó như:

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

Tuy nhiên cú pháp này:

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

sẽ tạo ra một cái gì đó như:

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

6
Giải thích những gì bạn đang cố gắng nói?
Kumar

6
Tại sao nên ng-attr-idtạo ng-id..? Sai rồi. Tôi tự hỏi ai ủng hộ điều này
TJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.