2016-10-05 13 views
0
  1. У меня есть <ul>, который содержит директиву ng-repeat.
  2. Внутри, у меня есть несколько «li», который содержит директиву: <li directive>.
  3. Массив (A), который служит директиве ng-repeat, содержит комментарии. И когда пользователь добавляет комментарий, я хочу отобразить его комментарий перед всеми остальными. Для этого я создаю другой массив (B). Сначала я добавляю новый комментарий, а затем комментарии из массива (A) после. Другими словами, я меняю (A) на (B) простым присваиванием (=).

ng-repeat обновляет DOM из нового содержимого массива (A), но ... но элемент DOM, который связывается с директивой, не является истинным элементом, я имею в виду элемент, который находится в ссылка - это не первый комментарий!Элемент DOM, введенный, не запускает свою собственную директиву

Это трудно объяснить, надеюсь, вы знаете, что я хочу знать.

PS: Если массив (A) пуст, и если я добавляю комментарий (li), директива связывается с истинным элементом. Но если есть один или несколько комментариев, это вызывает проблему, которую я объяснил.

Thx you.

+0

* «Надеюсь, вы знаете, что я хочу означать» * .... нет, конечно, не без [mcve] – charlietfl

ответ

1

Во-первых: у вас очень сложная обработка новых комментариев. Вы можете:

  • для каждого комментария есть некоторое время идентификатор
  • в нг-повтор использования «трэк commoent.timeId
  • в нг-повторить использование OrderBy OR (немного лучше) сортировать комментарий массив по timeId после нажать новый комментарий к массиву A. => вы можете удалить массив B полностью

Каждый литий работает директива separataly. Это означает (в вашем с что после добавления каждого нового комментария, ng-repeat DOM полностью перерисовывается => директива используется для каждого комманда.

С моим предложенным решением директива будет вызываться только для недавно добавленных комментариев (так как «отслеживание по» предотвращает часть при повторном рендеринге неизменных комментариев).

... но ... Я надеюсь, что я understander вашей проблемы ...

+0

Удивительный, ваш кончик отлично работает! посмотрите http://jsfiddle.net/A8Vgk/2840/ –

1

Я думаю, что вы хотите что-то вроде:

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

Однако без лучшего примера в вопросе это просто грубо

 Смежные вопросы

  • Нет связанных вопросов^_^