Не удалось обновить мобильный список jquery после добавления элемента ngClick

Я пытаюсь динамически добавить элемент в список jquery mobile. Я добавляю элемент с помощью события ngClick и показываю список с помощью ngRepeat. Я вызвал обновление списка, но последний элемент не может быть правильно оформлен. Какое событие следует использовать для правильного обновления? Спасибо.

$scope.addItem = function () {
    $scope.userList.push($scope.userInputText);
    $scope.userInputText = null;
    $("#listview1").listview("refresh");
 }

http://jsfiddle.net/hFj2T/


person cwlaualex    schedule 23.07.2013    source источник


Ответы (3)


Следующая директива работает для меня. Просто добавьте list-view в свой тег ul, а также data-watch="userList", чтобы указать angular, какой объект отслеживать для изменений.

<ul list-view data-watch="userList" data-role="listview" data-filter="true" >
   <li ng-repeat="user in userList">{{user.name}}</li>
</ul>

app.directive('listView', function () {
  var link=function(scope, element, attrs) {
    $(element).listview();
    scope.$watchCollection(attrs.watch, function() {
      $(element).listview("refresh");
    });
  };
  return {
    restrict: 'EA',
    scope:false,
    link: link
  };
});
person Dustin Butler    schedule 14.12.2014
comment
Работает как шарм. Спасибо! - person Chris Aelbrecht; 13.05.2015
comment
Спасибо, это действительно помогло мне. Для тех, кто изо всех сил пытается заставить это работать, я должен был убедиться, что мой список не находится в div с data-role=controlgroup, а также убедиться, что данные установлены правильно. - person AKMorris; 13.09.2017

Это происходит потому, что и пользовательский интерфейс JQuery, и Angular пытаются обновить DOM, используя событие готовности документа. Возникает состояние гонки, при котором Angular добавляет новые данные после того, как JQuery уже создал список. Решение Sheetal работает, потому что оно заставляет JQuery модифицировать DOM и создавать список после Angular заполнения данных.

Другим решением является инструмент под названием адаптер jquery для мобильных устройств.

person Bobwise    schedule 21.10.2013

person    schedule
comment
Я пробовал это в новой скрипке. Это работает, но я хочу знать, есть ли какое-либо лучшее событие, которое я могу сделать для этого обновления. jsfiddle.net/hFj2T/4 - person cwlaualex; 23.07.2013
comment
Я не использовал angular.js, но использовал jquerymobile, в JQM этого не происходит, и обновление работает мгновенно, не знаю, почему в этом случае это не работает !!! - person Sheetal; 23.07.2013
comment
Я предполагаю, что AngularJS еще не обновил список, когда вызывается обновление. Эти 2 фреймворка не знают о работе другой стороны. - person cwlaualex; 23.07.2013