如何创建输出唯一 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);
};
});
不确定这是否能完全解决您的问题,但希望对您有所帮助。
问题很简单,如何创建一个 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);
};
});
不确定这是否能完全解决您的问题,但希望对您有所帮助。