Pourvu d'un élément HTML de type div
, comment définir la valeur de son id
attribut, qui est la concaténation d'une variable de portée et d'une chaîne?
Pourvu d'un élément HTML de type div
, comment définir la valeur de son id
attribut, qui est la concaténation d'une variable de portée et d'une chaîne?
Réponses:
ngAttr
La directive peut être totalement utile ici, comme présenté dans la documentation officielle
https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes
Par exemple, pour définir la id
valeur d'attribut d'un div
élément, afin qu'il contienne un index, un fragment de vue peut contenir
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
qui serait interpolé à
<div id="object-1"></div>
myScopeObject
la propriété d'un scope
objet soit exposée à l'aide d'un contrôleur. Veuillez également consulter docs.angularjs.org/guide/controller . Est-ce assez clair pour vous ou dois-je développer davantage?
<div id="{{ 'object' + index }}">
et <div ng-attr-id="{{ 'object' + index }}">
? Les documents semblent dire que le préfixe ng-attr-
est d'aider dans les cas où l'élément est quelque chose de non standard, comme pas un <div>
. Suis-je en train de lire les documents à droite?
Cette chose a très bien fonctionné pour moi:
<div id="{{ 'object-' + $index }}"></div>
ng-attr-id
est avantageux dans 0% des situations. Aucun exemple ne peut être fourni, car il n'y en a pas.
ng-attr-id
méthode consiste à faire en sorte que l'expression ng brut est jamais rendu dans un attribut HTML valide (par exemple id
, label
etc.). Ceci permet d'empêcher toute utilisation en aval de lire les «ordures» (par exemple avant que le rendu ne soit terminé, ou après un crash js)
Dans le cas où vous êtes venu à cette question mais lié à une nouvelle version angulaire> = 2.0 .
<div [id]="element.id"></div>
Une manière plus élégante que j'ai trouvée pour obtenir ce comportement est simplement:
<div id="{{ 'object-' + myScopeObject.index }}"></div>
Pour mon implémentation, je voulais que chaque élément d'entrée dans une répétition ng ait chacun un identifiant unique auquel associer l'étiquette. Donc, pour un tableau d'objets contenus dans myScopeObjects, on pourrait faire ceci:
<div ng-repeat="object in myScopeObject">
<input id="{{object.name + 'Checkbox'}}" type="checkbox">
<label for="{{object.name + 'Checkbox'}}">{{object.name}}</label>
</div>
Pouvoir générer des identifiants uniques à la volée peut être très utile lors de l'ajout dynamique de contenu comme celui-ci.
Juste <input id="field_name_{{$index}}" />
Si vous utilisez cette syntaxe:
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
Angular rendra quelque chose comme:
<div ng-id="object-1"></div>
Cependant cette syntaxe:
<div id="{{ 'object-' + $index }}"></div>
va générer quelque chose comme:
<div id="object-1"></div>
ng-attr-id
créer ng-id
..? c'est faux. Je me demande qui vote positivement
myScopeObject
vient-il? Où pourrais-je le définir?