javascript - Hur sätter man id-attributet för ett HTML-element dynamiskt med angularjs (1.x)?


Givet ett HTML-element av typen div, hur sätter man värdet på dess id-attribut, vilket är sammanfogningen av en scopvariabel och en sträng?

Svar #1

ngAttr-direktivet kan vara till stor hjälp här, som introduceras i den officiella dokumentationen

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

Till exempel, för att ställa in id-attributets värde på ett div-element, så att det innehåller ett index, kan ett vyfragment innehålla

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

vilket skulle interpoleras till

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

Svar #2

Den här saken fungerade ganska bra för mig:

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

Svar #3

Om du kom till denna fråga men relaterad till nyare Angular-version >= 2.0.

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

Svar #4

Ett mer elegant sätt jag har hittat för att uppnå detta beteende är helt enkelt:

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

För min implementation ville jag att varje input-element i en ng-repeat skulle ha ett unikt id för att koppla etiketten till. Så för en array av objekt som finns i myScopeObjects kunde man göra så här:

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

Att kunna generera unika ID:n på direkten kan vara ganska användbart när man dynamiskt lägger till innehåll som detta.

Svar #5

Du kan helt enkelt göra följande

I din js

$scope.id = 0;

I din mall

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

vilket kommer att återge

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

Det är inte nödvändigt att sammanfoga inne i dubbla klammerparenteser.

Relaterade artiklar