如何创建输出唯一 ID 的 angular 过滤器

How to create an angular filter that outputs a unique ID

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

注意:ID 必须 'globally' 唯一,这使得 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 的新 ::(即一次性绑定)运算符。

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

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

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

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