При условии, что HTML-элемент типа div
, как установить значение его id
атрибута, который является объединением переменной области видимости и строки?
При условии, что HTML-элемент типа div
, как установить значение его id
атрибута, который является объединением переменной области видимости и строки?
Ответы:
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>
myScopeObject
это свойство scope
объекта, экспонируемого с помощью контроллера. Пожалуйста, смотрите также docs.angularjs.org/guide/controller . Это достаточно ясно для вас или я укажу дальше?
<div id="{{ 'object' + index }}">
а <div ng-attr-id="{{ 'object' + index }}">
? Документы, кажется, говорят, что готовится ng-attr-
помочь в случаях, когда элемент является чем-то нестандартным, например, не a <div>
. Я правильно читаю документы?
Эта вещь работала для меня довольно хорошо:
<div id="{{ 'object-' + $index }}"></div>
ng-attr-id
выгодно в 0% ситуаций. Примеры не могут быть предоставлены, потому что их нет.
ng-attr-id
Метод для того, чтобы сырье нг выражение никогда не оказывается в допустимом атрибута HTML (например id
, label
и т.д.). Это должно остановить любое последующее использование чтения ng 'junk' (например, до завершения рендеринга или после сбоя js)
В случае, если вы пришли к этому вопросу, но связаны с более новой версией Angular> = 2.0 .
<div [id]="element.id"></div>
Более элегантный способ добиться такого поведения - просто:
<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>
Возможность генерировать уникальные идентификаторы на лету может быть очень полезна при динамическом добавлении контента, подобного этому.
Просто <input id="field_name_{{$index}}" />
Если вы используете этот синтаксис:
<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>
ng-attr-id
создавать ng-id
..? это неверно. Интересно, кто голосует против этого
myScopeObject
берутся? Где бы я это определил?