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

Thi*_*nne 255 javascript string-concatenation angularjs angularjs-scope

提供了一个类型的HTML元素div,如何设置其id属性的值,这是范围变量和字符串的串联?

Thi*_*nne 382

ngAttr 正如官方文档中所介绍的那样,指令在这里完全有用

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

例如,要设置元素的id属性值div,以便它包含索引,视图片段可能包含

<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
Run Code Online (Sandbox Code Playgroud)

将被内插到

<div id="object-1"></div>
Run Code Online (Sandbox Code Playgroud)

  • 不是以下两个相同的行为:`<div id ="{{'object'+ index}}">`和`<div ng-attr-id ="{{'object'+ index}}"> `?文档似乎说前缀"ng-attr-"是为了帮助解决元素是非标准的情况,比如不是`<div>`.我正在阅读文档吗? (16认同)
  • 使用nd-attr的@ broc.seib不仅仅是关于标准的.这是一种很好的做法,因为HTML解释器可以在加载角度之前为元素指定id.并且ng-attr确保仅在加载角度时才将id分配给元素.<img>标签中ng-src的情况也是如此. (3认同)
  • `myScopeObject` 从哪里来?我在哪里定义它? (2认同)

Tan*_*ikh 66

这件事对我很有用:

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

  • `ng-attr-id`方法是确保原始ng表达式永远不会在有效的HTML属性中呈现(例如`id`,`label`等).这是为了阻止任何下游使用读取'垃圾'(例如在渲染完成之前,或在js崩溃之后) (5认同)
  • 这在90%的情况下都能正常工作,但有时可能会出现难以调试的错误.你应该使用ng-attr-id代替. (2认同)

SoE*_*zPz 25

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

<div [id]="element.id"></div>
Run Code Online (Sandbox Code Playgroud)

  • 一些成员仍然点击Angularjs链接,即使他们正在搜索Angular链接.这有点令人困惑,错误将继续发生. (14认同)
  • 我同意; 它只会对那些觉得有用的成员有用. (5认同)
  • 那没用,问题出在 AngularJS 的上下文中 (3认同)
  • Google 似乎不太关心 AngularJS 和 Angular 2 之间的区别。这很有帮助,谢谢。 (3认同)

Cum*_*bus 23

我发现实现这种行为的更优雅方式很简单:

<div id="{{ 'object-' + myScopeObject.index }}"></div>
Run Code Online (Sandbox Code Playgroud)

对于我的实现,我希望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>
Run Code Online (Sandbox Code Playgroud)

在动态添加这样的内容时,能够动态生成唯一ID非常有用.


emi*_*l.c 9

你可以简单地做以下事情

在你的js

$scope.id = 0;
Run Code Online (Sandbox Code Playgroud)

在您的模板中

<div id="number-{{$scope.id}}"></div>
Run Code Online (Sandbox Code Playgroud)

这将呈现

<div id="number-0"></div>
Run Code Online (Sandbox Code Playgroud)

没有必要在双花括号内连接.


小智 5

只是 <input id="field_name_{{$index}}" />