Fornecido um elemento HTML do tipo div
, como definir o valor de seu id
atributo, que é a concatenação de uma variável de escopo e uma string?
Fornecido um elemento HTML do tipo div
, como definir o valor de seu id
atributo, que é a concatenação de uma variável de escopo e uma string?
Respostas:
ngAttr
diretiva pode ser totalmente útil aqui, conforme introduzido na documentação oficial
https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes
Por exemplo, para definir o id
valor do atributo de um div
elemento, para que ele contenha um índice, um fragmento de visualização pode conter
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
que seria interpolado para
<div id="object-1"></div>
myScopeObject
seja uma propriedade de um scope
objeto exposto usando um controlador. Consulte também docs.angularjs.org/guide/controller . Está claro o suficiente para você ou devo elaborar mais?
<div id="{{ 'object' + index }}">
e <div ng-attr-id="{{ 'object' + index }}">
? Os documentos parecem dizer que o precedente ng-attr-
é ajudar nos casos em que o elemento é algo fora do padrão, como não a <div>
. Estou lendo os documentos, certo?
Essa coisa funcionou muito bem para mim:
<div id="{{ 'object-' + $index }}"></div>
ng-attr-id
é vantajoso em 0% das situações. Nenhum exemplo pode ser fornecido, porque não há nenhum.
ng-attr-id
método é o de assegurar que a expressão ng bruto nunca é processado em um atributo válido HTML (por exemplo id
, label
, etc.). Esta é parar qualquer uso jusante lendo NG 'junk' (por exemplo, antes de tornar está completa, ou depois de um acidente js)
Caso você tenha chegado a essa pergunta, mas esteja relacionado à versão Angular mais recente> = 2.0 .
<div [id]="element.id"></div>
Uma maneira mais elegante que encontrei para atingir esse comportamento é simplesmente:
<div id="{{ 'object-' + myScopeObject.index }}"></div>
Para minha implementação, eu queria que cada elemento de entrada em um ng-repeat para cada um tivesse um ID exclusivo para associar o rótulo. Portanto, para uma matriz de objetos contidos no myScopeObjects, é possível fazer o seguinte:
<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 gerar IDs únicos em tempo real pode ser bastante útil ao adicionar dinamicamente conteúdo como este.
Somente <input id="field_name_{{$index}}" />
Se você usar esta sintaxe:
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
Angular renderizará algo como:
<div ng-id="object-1"></div>
No entanto, esta sintaxe:
<div id="{{ 'object-' + $index }}"></div>
irá gerar algo como:
<div id="object-1"></div>
ng-attr-id
criar ng-id
..? isto é errado. Eu quero saber quem upvotes isso
myScopeObject
vem? Onde eu definiria isso?