Proporcionado un elemento HTML de tipo div
, ¿cómo establecer el valor de su id
atributo, que es la concatenación de una variable de alcance y una cadena?
Proporcionado un elemento HTML de tipo div
, ¿cómo establecer el valor de su id
atributo, que es la concatenación de una variable de alcance y una cadena?
Respuestas:
ngAttr
La directiva puede ser de gran ayuda aquí, tal como se presenta en la documentación oficial
https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes
Por ejemplo, para establecer el id
valor de atributo de un div
elemento, de modo que contenga un índice, un fragmento de vista puede contener
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
que se interpolaría a
<div id="object-1"></div>
myScopeObject
es una propiedad de un scope
objeto expuesto utilizando un controlador. Consulte también docs.angularjs.org/guide/controller . ¿Eso es lo suficientemente claro para ti o debo explicarlo más?
<div id="{{ 'object' + index }}">
y <div ng-attr-id="{{ 'object' + index }}">
? Los documentos parecen decir que anteponer ng-attr-
es ayudar en casos donde el elemento es algo no estándar, como no un <div>
. ¿Estoy leyendo los documentos correctamente?
Esto me funcionó bastante bien:
<div id="{{ 'object-' + $index }}"></div>
ng-attr-id
Es ventajoso en 0% de las situaciones. No se pueden proporcionar ejemplos, porque no hay ninguno.
ng-attr-id
método es para asegurar que la expresión ng cruda nunca es generado en un atributo HTML válido (por ejemplo id
, label
, etc). Esto es para detener cualquier uso posterior que lea ng 'basura' (por ejemplo, antes de que se complete el renderizado, o después de un bloqueo de js)
En caso de que haya llegado a esta pregunta pero esté relacionado con la versión angular más nueva > = 2.0 .
<div [id]="element.id"></div>
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 una repetición ng tuviera una identificación única para asociar la etiqueta. Entonces, para una matriz de objetos contenidos dentro de myScopeObjects, se 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 muy útil al agregar dinámicamente contenido como este.
Sólo <input id="field_name_{{$index}}" />
Si usa esta sintaxis:
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
Angular representará 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>
ng-attr-id
crear ng-id
..? eso está mal. Me pregunto quién votará esto
myScopeObject
viene ¿Dónde lo definiría?