ngRepeat with $ scope。$ apply在指令中创建重复项

时间:2015-07-05 15:57:14

标签: angularjs angularjs-directive coffeescript qtip2

我有一个指令,通过模板将动态数据放入qTip。它通过获取模板并在其上使用$compile来做到这一点(原谅coffeescript):

$http.get scope.qtipTemplate, cache: $templateCache
.then (html) ->
  clone = $compile html.data
  generateQtip text: ->
    scope.$apply ->
      clone scope

generateQtip只是在directive元素上创建一个新的qTip,并将第一个参数作为content属性放在options对象上。

但是,每次打开qTip时,模板中的ngRepeat都会生成重复列表,即使使用limitTo作为过滤器也是如此。示例代码:

<ul>
    <li ng-repeat="person in object.people | limitTo:3 track by $index">{{person.name}}</li>
</ul>

生成以下第一次时间我打开qTip:

  
      
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   

这是第二次时间:

  
      
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   

这是第三次时间:

  
      
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   
  • John Doe
  •   
  • Jane Doe
  •   
  • Johnny Dowy
  •   

依此类推,等等。

为什么会这样?有任何想法吗?这是我在this link中的完整指令代码。

1 个答案:

答案 0 :(得分:0)

不确定原因,但我只需要进一步移动$compile

$http.get scope.qtipTemplate, cache: $templateCache
.then (html) ->
  generateQtip text: ->
    scope.$apply ->
      $compile(html.data)(scope)