注入的元素DOM不会启动自己的指令

时间:2016-10-05 16:10:46

标签: angularjs compilation ng-repeat directive digest

  1. 我有<ul>,其中包含指令ng-repeat。
  2. 在其中,我有多个“li”,其中包含一个指令:<li directive>
  3. 用于指令ng-repeat的数组(A)包含注释。当用户添加评论时,我希望在所有其他人之前显示其评论。为此,我构建了另一个数组(B)。我首先注入新的注释,然后是数组(A)之后的注释。 换句话说,我通过简单的赋值(=)将(A)改为(B)。
  4. ng-repeat从数组(A)的新内容更新DOM但是......但是绑定在指令上的DOM元素不是真正的元素,我的意思是链接函数中的元素是是第一个评论!

    这很难解释,我希望你知道我想要的意思。

    PS:如果数组(A)为空,如果我添加注释(li),则指令绑定true元素。但如果有一条或多条评论,那就会引起我所解释的问题。

    求你了。

2 个答案:

答案 0 :(得分:1)

首先:您对新评论的处理非常复杂。 你可以:

  • 每个评论都有一些时间ID
  • 在ng-repeat中使用&#34;通过commoent.timeId跟踪
  • 在ng-repeat中使用orderBy OR(稍微好些一点)在将新注释推送到数组A之后按timeId对注释数组进行排序。 =&GT;你可以完全删除B阵列

每个 li 分别运行指令。 这意味着(在您的解决方案中)在添加每个新评论之后,ng-repeat DOM被完全重新渲染=&gt;该指令用于每个提交。

使用我提出的解决方案,只会为新添加的注释调用该指令(因为&#34;跟踪&#34;部分阻止重新呈现未更改的注释)。

......但......我希望我能解决你的问题...

答案 1 :(得分:1)

我认为你想要的是:

<ul>
   <li ng-if="newComment">{{newComment.text}}</li>
   <li ng-repeat="comment in comments" ng-hide="comment==newComment">
       {{comment.text}}
   <li>
</ul>

然而,如果没有更好的例子,这只是粗略的