【发布时间】:2014-07-02 12:42:34
【问题描述】:
提供了一个div类型的HTML元素,如何设置其id属性的值,即作用域变量和字符串的拼接?
【问题讨论】:
标签: javascript angularjs angularjs-scope string-concatenation
提供了一个div类型的HTML元素,如何设置其id属性的值,即作用域变量和字符串的拼接?
【问题讨论】:
标签: javascript angularjs angularjs-scope string-concatenation
ngAttr 指令在这里完全可以提供帮助,正如官方文档中介绍的那样
https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes
例如,要设置div 元素的id 属性值,使其包含索引,视图片段可能包含
<div ng-attr-id="{{ 'object-' + myScopeObject.index }}"></div>
这会被插值到
<div id="object-1"></div>
【讨论】:
myScopeObject 来自哪里?我会在哪里定义它?
myScopeObject 是使用控制器公开的scope 对象的属性。另请参阅docs.angularjs.org/guide/controller。这对你来说够清楚了吗,还是我应该进一步详细说明?
<div id="{{ 'object' + index }}"> 和 <div ng-attr-id="{{ 'object' + index }}">?文档似乎说在前面添加ng-attr- 是为了帮助解决元素是非标准的情况,比如不是<div>。我读的文档对吗?
这件事对我很有效:
<div id="{{ 'object-' + $index }}"></div>
【讨论】:
ng-attr-id 在 0% 的情况下是有利的。无法提供示例,因为没有。
ng-attr-id 方法是为了确保原始 ng 表达式永远不会呈现在有效的 HTML 属性中(例如 id、label 等)。这是为了阻止任何下游使用读取 ng 'junk'(例如,在渲染完成之前,或者在 js 崩溃之后)
如果您遇到这个问题但与较新的 Angular 版本 >= 2.0 相关。
<div [id]="element.id"></div>
【讨论】:
我发现实现此行为的一种更优雅的方法是:
<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 非常有用。
【讨论】:
您可以简单地执行以下操作
在你的 js 中
$scope.id = 0;
在你的模板中
<div id="number-{{$scope.id}}"></div>
将渲染
<div id="number-0"></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..?这是错误的。我想知道谁赞成这个