如何使用angularjs(1.x)动态设置HTML元素的id属性?


Answers:


392

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来的?我在哪里定义它?
Jan Aagaard

1
@JanAagaard让我们假设myScopeObjectscope使用控制器公开的对象的属性。另请参阅docs.angularjs.org/guide/controller。这对您来说是否足够清楚,或者我需要进一步阐述?
蒂埃里·玛丽安

我做了ng-attr-id =“ {{'Panel'+ file.Id}}”“,但它不会为我生成id =” Panel12312“ :(
Manuel Maestrini 2015年

17
不是以下两个完全相同的行为:<div id="{{ 'object' + index }}"><div ng-attr-id="{{ 'object' + index }}">?文档似乎说,前置ng-attr-是为元素非标准(例如不是)的情况提供帮助<div>。我看的文档对吗?
broc.seib 2015年

3
使用nd-attr的@ broc.seib不仅与标准有关。这是一个好习惯,因为HTML解释程序可以在加载angular之前将id分配给元素。ng-attr确保仅在加载angular时才将id分配给元素。<img>标签中的ng-src也是如此。
亚历克斯(Alex)

70

这件事对我来说很好用:

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


时间飞逝,也许最直观的语法现在可以按预期运行。我记得在遍历列表时遇到一些问题。
蒂埃里·玛丽安

2
在90%的情况下,此方法可以正确运行,但有时您会遇到难以调试的错误。您应该改用ng-attr-id。
巴基岛

ng-attr-id在0%的情况下是有利的。无法提供示例,因为没有示例。
忽略

5
ng-attr-id方法是,以确保原料纳克表达再也不能在有效的HTML属性呈现(例如idlabel等)。这是为了停止任何下游用法读取ng'垃圾'(例如,在渲染完成之前或js崩溃之后)
飞越

34

如果您遇到此问题,但与更新的Angular版本> = 2.0有关

<div [id]="element.id"></div>

2
那没有用,问题是在AngularJS的背景下
btk '18

8
我同意; 它只会对那些认为有用的成员有用。
SoEzPz

16
一些成员即使正在搜索Angular链接,仍然会单击Angularjs链接。这有点令人困惑,错误将继续发生。
SoEzPz

24

我发现实现此行为的一种更优雅的方法很简单:

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

对于我的实现,我希望ng-repeat中的每个输入元素都有一个唯一的ID与标签关联。因此,对于myScopeObjects中包含的一组对象,可以这样做:

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

动态添加此类内容时,能够动态生成唯一ID会非常有用。


我认为这种方法存在问题。页面加载后,我正在初始化角度绑定。现在有时div无法正确加载,我猜这是由于不同div的ID冲突所致。
2015年

有趣。如果您可以在一个笨拙的示例中重现您的行为,我将很乐意将其检查出来。使用'ng-attr-id ='是否有效,而仅使用'id ='是否可行?
积云雨云

9

您可以简单地执行以下操作

在你的js中

$scope.id = 0;

在您的模板中

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

这将呈现

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

不必在双大括号内连接。



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
解释您要说什么?
库玛(Kumar)

6
为什么要ng-attr-id创建ng-id..?错了 我想知道谁对此表示支持
TJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.