0

问题很简单,你如何创建一个 angularJs 过滤器,它将任何输入连接到一个唯一的 ID。这对于生成 HTML id 或为 ng-repeat 中的一组元素定义唯一属性值非常有用。

注意:ID 必须是“全局”唯一的,这使得 Angular ng-repeat$index无用。

现在,您可能想到的解决方案是这样的:

myModule.filter('uniqueId', function(){ var idCounter = 0; return function(input) { return (input || '') + (++idCounter); }; });

并在您的 HTML 中编写如下内容:

<div id="{{groupName | uniqueId}}">

挑战在于 Angular 将进入摘要循环,因为评估groupName | uniqueId永远不会产生相同的值,这意味着范围永远不会稳定。

最后一件事。我们使用 Angular v1.2.27,这意味着我们不能使用 Angular 1.3 的新::(即一次性绑定)运算符。

4

1 回答 1

2

如果您可以绑定到对象而不是单个属性,则可以执行以下操作:

检查对象的唯一值。如果存在则返回它。如果不存在,则生成一个,分配它并返回它。

myModule.filter('uniqueId', function(){
    var idCounter = 0;
    return function(input) {
        return input.$$uniqueValue || (input.$$uniqueValue = ++idCounter);
    };
});

不确定这是否能完全解决您的问题,但我希望它有所帮助。

于 2015-01-12T17:25:15.260 回答