Cómo establecer el atributo id de un elemento HTML dinámicamente con angularjs (1.x)?


Proporcionado un elemento HTML de tipo div, cómo establecer el valor de su atributo id, que es la concatenación de una variable de ámbito y una cadena ?

Author: Thierry Marianne, 2014-05-14

6 answers

ngAttr directiva puede ser totalmente de ayuda aquí, como se introdujo en la documentación oficial

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

Por ejemplo, para establecer el valor del atributo id de un elemento div, de modo que contenga un índice, un fragmento de vista podría contener

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

Que se interpolaría a

<div id="object-1"></div>
 353
Author: Thierry Marianne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-14 14:52:11

Esto me funcionó bastante bien:

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

 54
Author: Tanveer Shaikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-13 05:45:12

Una forma más elegante que encontré para lograr este comportamiento es simplemente:

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

Para mi implementación quería que cada elemento de entrada en un ng-repeat tuviera un id único con el que asociar la etiqueta. Así que para una matriz de objetos contenidos dentro de myScopeObjects uno podría hacer esto:

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

Ser capaz de generar identificadores únicos sobre la marcha puede ser bastante útil cuando se agrega dinámicamente contenido como este.

 22
Author: Cumulo Nimbus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-16 16:53:49

En caso de que haya llegado a esta pregunta, pero relacionado con la nueva Versión angular >= 2.0.

<div [id]="element.id"></div>
 11
Author: SoEzPz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-17 16:06:00

Usted podría simplemente hacer lo siguiente

En su js

$scope.id = 0;

En su plantilla

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

Que rendirá

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

No es necesario concatenar dentro de llaves dobles.

 9
Author: emil.c,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-07 12:07:28

Si usa esta sintaxis:

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

Angular renderizará algo como:

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

Sin embargo esta sintaxis:

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

Generará algo como:

<div id="object-1"></div>
 0
Author: K Rajesh Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-22 17:13:31