ngRepeat с $ scope. $ apply создает дубликаты в директиве

0

У меня есть директива, которая помещает динамические данные в qTip через шаблон. Он делает это, выбирая шаблон и используя $compile на нем (извините coffeescript):

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

Функция generateQtip просто создает новый qTip для элемента директивы и помещает первый аргумент в качестве свойства content объекта options.

Что происходит, хотя есть, каждый раз, когда я открываю qTip, ngRepeat в шаблоне создает дубликаты списков, даже с limitTo в качестве фильтра. Пример кода:

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

Производит следующее при первом открытии qTip:

  • Джон Доу
  • Джейн Доу
  • Джонни Доуи

И это во второй раз:

  • Джон Доу
  • Джейн Доу
  • Джонни Доуи
  • Джон Доу
  • Джейн Доу
  • Джонни Доуи

И это в третий раз:

  • Джон Доу
  • Джейн Доу
  • Джонни Доуи
  • Джон Доу
  • Джейн Доу
  • Джонни Доуи
  • Джон Доу
  • Джейн Доу
  • Джонни Доуи

И так далее, и так далее.

Почему это происходит? Есть идеи? Вот мой полный директивный код в этой ссылке.

Теги:
coffeescript
angularjs-directive
qtip2

1 ответ

0
Лучший ответ

Не знаю, почему, но мне просто пришлось переместить $compile дальше внутри.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню