相关疑难解决方法(0)

ng-repeat如何工作?

我解剖了ng-repeat并提取了附加的代码块,看到它们包含处理重复算法的逻辑(我想了解它是如何工作的).

我有很多问题,但由于它们都是关于ng-repeat的内部结构,所以我选择在这里问问它们.我认为没有理由将它们分成不同的SO问题.我已将每个问题引用的代码行标记为内联.

  1. 为什么他们需要确保这trackById不是本机hasOwnProperty功能?(这就是该assertNotHasOwnProperty函数的功能,是Angular内部API的一部分)
  2. 就我的直觉而言,这个代码在转发器中已有的项目上执行,当它必须更新集合时 - 它只是将它们拾取并将它们推入列表进行处理,对吧?
  3. 此代码块显然在转发器集合中查找重复项.但它究竟是如何做到这一点超出了我.请解释.
  4. 为什么角有存储块对象都nextBlockMap nextBlockOrder
  5. 什么是block.endNodeblock.startNode
  6. 我假设上述问题的答案将澄清这个算法是如何工作的,但请解释为什么它必须检查是否nextNode已经(已)'$$NG_REMOVED'
  7. 这里发生了什么?同样,我认为问题6已经为这一个提供了答案.但仍然指出了这一点.

就像我说的那样,我挖掘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)

angularjs angularjs-ng-repeat

8
推荐指数
1
解决办法
4169
查看次数

标签 统计

angularjs ×1

angularjs-ng-repeat ×1