Jquery mobile 单击添加项后刷新jquery mobile listview失败

Jquery mobile 单击添加项后刷新jquery mobile listview失败,jquery-mobile,angularjs,Jquery Mobile,Angularjs,我正在尝试将项动态添加到jquery mobile的listview中。我使用ngClick事件添加项目,并使用ngRepeat显示列表。我已调用listview刷新,但最新项目无法正确设置样式。我应该使用哪个事件来正确刷新?谢谢 $scope.addItem = function () { $scope.userList.push($scope.userInputText); $scope.userInputText = null; $("#listview1").li

我正在尝试将项动态添加到jquery mobile的listview中。我使用ngClick事件添加项目,并使用ngRepeat显示列表。我已调用listview刷新,但最新项目无法正确设置样式。我应该使用哪个事件来正确刷新?谢谢

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

发生这种情况是因为JQuery UI和Angular都试图使用document ready事件更新DOM。竞争条件正在发生,在这种情况下,Angular在JQuery已经创建listview之后添加新数据。Sheetal的解决方案之所以有效,是因为它强制JQuery在Angular填充数据后修改DOM并创建listview


另一个解决方案是一个恰当地称为

的工具。以下指令适用于我。只需将列表视图添加到ul标记中,并添加data watch=“userList”,以告知要监视哪个对象的更改

<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
  };
});
  • {{user.name}
应用程序指令('listView',函数(){ 变量链接=函数(范围、元素、属性){ $(元素).listview(); 作用域$watchCollection(attrs.watch,function(){ $(元素).listview(“刷新”); }); }; 返回{ 限制:“EA”, 范围:假, 链接:链接 }; });
我已经在一把新小提琴上试过了。它可以工作,但我想知道是否有更好的事件,我可以做这个刷新。我没有使用angular.js,但使用了jquerymobile,在JQM中,这不会发生,刷新会立即工作,不知道为什么在这种情况下不能工作!!!我猜AngularJS在调用刷新时还没有更新列表。这两个框架不知道另一方的工作。工作起来很有魅力。谢谢!谢谢,这真的帮助了我。对于那些努力工作的人,我必须确保我的列表不在带有data role=“controlgroup”的div中,并且确保正确设置数据监视。
<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
  };
});