Как установить атрибут id элемента HTML динамически с помощью angularjs (1.x)?

230

Предоставлен элемент HTML типа div, как установить значение его атрибута id, который является конкатенацией переменной области и строкой?

Теги:
concatenation
angularjs-scope
string-concatenation

7 ответов

373
Лучший ответ

Директива ngAttr может полностью помочь здесь, как представлено в официальной документации

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

Например, чтобы установить значение атрибута id элемента div, чтобы он содержал индекс, фрагмент представления мог содержать

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

который будет интерполирован

<div id="object-1"></div>
  • 1
    Откуда берется myScopeObject ? Где бы я это определил?
  • 1
    @JanAagaard Предположим, что myScopeObject является свойством объекта scope предоставляемого с помощью контроллера. Пожалуйста, смотрите также docs.angularjs.org/guide/controller . Это достаточно ясно для вас или я укажу дальше?
Показать ещё 8 комментариев
53

Эта вещь работала для меня довольно хорошо:

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

  • 0
    Время летит, и, возможно, самый интуитивно понятный синтаксис теперь работает так, как ожидалось. Я помню некоторые проблемы при переборе списка.
  • 0
    Это правильный ответ
Показать ещё 3 комментария
23

Более элегантный способ, который я нашел для достижения такого поведения, просто:

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

Для моей реализации я хотел, чтобы каждый элемент ввода в ng-repeat имел уникальный идентификатор, чтобы связать метку с. Итак, для массива объектов, содержащихся внутри myScopeObjects, можно сделать следующее:

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

Возможность генерации уникальных идентификаторов "на лету" может быть очень полезна при динамическом добавлении контента, подобного этому.

  • 0
    Я думаю, что у этого подхода есть проблемы. Я инициализирую угловое связывание после загрузки страницы. Теперь иногда div не загружается должным образом, что, я думаю, происходит из-за столкновения id другого div.
  • 0
    Интересно. Если бы вы могли воспроизвести свое поведение на примере плунжера, я был бы рад проверить его. Работает ли 'ng-attr-id =' и работает ли просто 'id ='?
12

Если вы пришли к этому вопросу, но связаны с более новой версией Angular> = 2.0.

<div [id]="element.id"></div>
  • 1
    Это не полезно, вопрос в контексте AngularJS
  • 3
    Согласен; это будет полезно только тем участникам, которые считают это полезным.
Показать ещё 1 комментарий
9

Вы можете просто сделать следующее

В вашем js

$scope.id = 0;

В вашем шаблоне

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

который отобразит

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

Нет необходимости конкатенации внутри двойных фигурных скобок.

0

Просто <input id="field_name_{{$index}}"/>

  • 0
    Почему $ перед индексом?
  • 0
    Я думаю, что это, вероятно, потому что это должно быть в нг-повтор?
0

Если вы используете этот синтаксис:

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

Angular сделает что-то вроде:

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

Однако этот синтаксис:

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

будет генерировать что-то вроде:

<div id="object-1"></div>
  • 6
    Объясните, что вы пытаетесь сказать?
  • 5
    Почему ng-attr-id создавать ng-id ..? это неверно. Интересно, кто это голосует?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню