我解剖了ng-repeat并提取了附加的代码块,看到它们包含处理重复算法的逻辑(我想了解它是如何工作的).
我有很多问题,但由于它们都是关于ng-repeat的内部结构,所以我选择在这里问问它们.我认为没有理由将它们分成不同的SO问题.我已将每个问题引用的代码行标记为内联.
trackById不是本机hasOwnProperty功能?(这就是该assertNotHasOwnProperty函数的功能,是Angular内部API的一部分)nextBlockMap 和在nextBlockOrder?block.endNode和block.startNode?nextNode已经(已)'$$NG_REMOVED'?就像我说的那样,我挖掘ng-repeat来找到我认为与重复机制相关的代码.另外,我理解指令的其余部分.所以不用多说,这里是代码(来自v1.2.0):
length = nextBlockOrder.length = collectionKeys.length;
for (index = 0; index < length; index++) {
key = (collection === collectionKeys) ? index : collectionKeys[index];
value = collection[key];
trackById = trackByIdFn(key, value, index);
// question #1
assertNotHasOwnProperty(trackById, '`track by` id');
// question #2
if (lastBlockMap.hasOwnProperty(trackById)) {
block = lastBlockMap[trackById]; …Run Code Online (Sandbox Code Playgroud)