mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
Added nextUid() function for unified way of generating IDs in angular
This commit is contained in:
parent
20ce797906
commit
2a12f7dcaa
2 changed files with 47 additions and 0 deletions
|
|
@ -114,6 +114,7 @@ var $$element = '$element',
|
|||
angularCallbacks = extensionMap(angular, 'callbacks'),
|
||||
nodeName_,
|
||||
rngScript = /^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,
|
||||
uid = ['0', '0', '0'];
|
||||
DATE_ISOSTRING_LN = 24;
|
||||
|
||||
/**
|
||||
|
|
@ -189,6 +190,36 @@ function formatError(arg) {
|
|||
return arg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric
|
||||
* characters such as '012ABC'. The reason why we are not using simply a number counter is that
|
||||
* the number string gets longer over time, and it can also overflow, where as the the nextId
|
||||
* will grow much slower, it is a string, and it will never overflow.
|
||||
*
|
||||
* @returns an unique alpha-numeric string
|
||||
*/
|
||||
function nextUid() {
|
||||
var index = uid.length;
|
||||
var digit;
|
||||
|
||||
while(index) {
|
||||
index--;
|
||||
digit = uid[index].charCodeAt(0);
|
||||
if (digit == 57 /*'9'*/) {
|
||||
uid[index] = 'A';
|
||||
return uid.join('');
|
||||
}
|
||||
if (digit == 90 /*'Z'*/) {
|
||||
uid[index] = '0';
|
||||
} else {
|
||||
uid[index] = String.fromCharCode(digit + 1);
|
||||
return uid.join('');
|
||||
}
|
||||
}
|
||||
uid.unshift('0');
|
||||
return uid.join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* @workInProgress
|
||||
|
|
|
|||
|
|
@ -582,4 +582,20 @@ describe('angular', function(){
|
|||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
describe('nextUid()', function(){
|
||||
it('should return new id per call', function(){
|
||||
var seen = {};
|
||||
var count = 100;
|
||||
|
||||
while(count--) {
|
||||
var current = nextUid();
|
||||
expect(current.match(/[\d\w]+/)).toBeTruthy();
|
||||
expect(seen[current]).toBeFalsy();
|
||||
seen[current] = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue