HTML öğesinin id niteliğini angularjs (1.x) ile dinamik olarak nasıl ayarlayabilirim?


Yanıtlar:


392

ngAttr Direktif, resmi belgelerde belirtildiği gibi burada tamamen yardımcı olabilir

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

Örneğin id, bir divöğenin öznitelik değerini bir dizin içerecek şekilde ayarlamak için , bir görünüm parçası

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

hangi enterpolasyona girer

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

1
Nereden myScopeObjectgeliyor? Nerede tanımlayabilirim?
Jan Aagaard

1
@JanAagaard Farz edelim ki bir denetleyici kullanılarak açığa çıkarılan myScopeObjectbir scopenesnenin bir özelliği . Lütfen ayrıca docs.angularjs.org/guide/controller adresine bakın . Bu sizin için yeterince açık mı yoksa daha fazla ayrıntıya gireyim mi?
Thierry Marianne

ng-attr-id = "{{'Panel' + file.Id}}" yaptım ama benim için id = "Panel12312" oluşturmuyor :(
Manuel Maestrini

17
Aşağıdaki iki davranış aynı değil: <div id="{{ 'object' + index }}">ve <div ng-attr-id="{{ 'object' + index }}">? Dokümanlar ng-attr-, öneklemenin , a öğesinin standart olmayan bir şey olduğu durumlarda yardımcı olmak olduğunu söylüyor <div>. Dokümanları doğru okuyor muyum?
broc.seib

3
@ broc.seib nd-attr kullanarak sadece standart değildir. HTML yorumlayıcısı, açısal yüklenmeden önce öğeye id atayabildiği için bu iyi bir uygulamadır. Ng-attr, öğeye yalnızca açısal yüklendiğinde kimlik atamasını sağlar. <img> etiketindeki ng-src için de durum aynıdır.
Alex

70

Bu şey benim için oldukça iyi çalıştı:

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


Zaman uçuyor ve belki de en sezgisel sözdizimi artık beklendiği gibi çalışıyor. Bir listeyi tekrarlarken bazı sorunlar yaşadığımı hatırlıyorum.
Thierry Marianne

2
Bu, vakaların% 90'ında doğru çalışır, ancak bazen hata ayıklaması zor olan hatalar alabilirsiniz. Bunun yerine ng-attr-id kullanmalısınız.
Baki

ng-attr-idDurumların% 0'ında avantajlıdır. Hiçbir örnek verilemez, çünkü hiçbiri yoktur.
omikes

5
ng-attr-idYöntem ham ng ifadesi (örneğin geçerli bir HTML özelliğinde işlenen asla sağlamaktır id, labelvs.). Bu, 'önemsiz' okuma aşağı akış kullanımını durdurmak içindir (örneğin, render tamamlanmadan önce veya bir js çökmesinden sonra)
Overflew

34

Bu soruya geldiyseniz ancak daha yeni Açısal sürüm> = 2.0 ile ilgili olması durumunda .

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

2
Bu yararlı değil, soru AngularJS bağlamında
btk

8
Katılıyorum; sadece yararlı bulan üyeler için yararlı olacaktır.
SoEzPz

16
Bazı üyeler Angularjs bağlantılarını arıyor olsalar da Angularjs bağlantılarını tıklıyorlar. Biraz kafa karıştırıcı ve hatalar olmaya devam edecek.
SoEzPz

24

Bu davranışı elde etmek için bulduğum daha zarif bir yol:

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

Benim uygulama için her giriş öğesinin ng-tekrar her etiket ile ilişkilendirmek için benzersiz bir kimliği olmasını istedim. Yani myScopeObjects içinde bulunan bir dizi nesne için bunu yapabilirsiniz:

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

Bu tür içeriği dinamik olarak eklerken anında benzersiz kimlikler oluşturabilmek oldukça yararlı olabilir.


Bu yaklaşımın sorunları olduğunu düşünüyorum. Sayfa yüklendikten sonra açısal ciltlemeyi başlatıyorum. Şimdi zaman zaman div, farklı div id çatışması nedeniyle sanırım düzgün yüklenemedi.
sumeet

İlginç. Davranızı bir dalgıç örnekte yeniden üretebilirseniz, kontrol etmekten mutluluk duyarım. 'Ng-attr-id =' kullanmak ve 'id =' kullanmak işe yaramıyor mu?
Cumulo Nimbus

9

Sadece aşağıdakileri yapabilirsiniz

Senin js

$scope.id = 0;

Şablonunuzda

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

hangisi render edecek

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

Çift kıvrımlı parantez içinde birleştirmek gerekli değildir.



0

Bu sözdizimini kullanırsanız:

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

Açısal:

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

Ancak bu sözdizimi:

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

şöyle bir şey üretecek:

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

6
Ne demeye çalıştığınızı açıklayın?
Kumar

6
Neden ng-attr-idyaratmalı ng-id..? bu yanlış. Bunu kimin oyladığını merak ediyorum
TJ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.