Ng-重复不更新,直到刷新页面

时间:2016-09-07 19:35:04

标签: angularjs ajax ionic-framework angularjs-ng-repeat angularjs-rootscope

简要介绍一下我正在做的事情:

此应用程序是一个电话簿,它调用我们的后端系统并返回一个JSON有效负载,然后将其解析并存储到本地存储以供离线访问,然后以简单的主屏幕格式反映数据。

提供简单的工作流程:

  1. 用户登录
  2. 通过Ajax请求调用后端是在用户的帐户下进行的
  3. 数据存储到本地存储
  4. 将数据添加到$ rootScope.allEmployeeInformation变量
  5. Ion-List反映主屏幕上$ rootScope.allEmployeeInformation变量中存储的数据。
  6. 我的问题在于:

    登录后,数据被拉出并正确存储,但Ion-List不显示数据,直到通过我实现的pull to refresh功能刷新页面,重新同步按钮或​​重新启动应用程序。

    有没有办法确保在用户不需要刷新页面的情况下显示这些数据?

    非常乐意提供所需的更多信息。谢谢你的帮助!

    根据要求编辑,更新一些代码:

    Code which performs the ajax request

    显示信息的Html:

    <ion-view> 
    <ion-content class="scroll-content has-header animated fadeIn" ng-controller="HomeScreenController" padding="true">
    <ion-refresher
    pulling-text="Pull to resync...."
    on-refresh="resyncEmployees(true)">
    </ion-refresher>
    <ion-list>
    <ion-item
    class="ion-item-content"
    ng-repeat="employee in allEmployeeInformation | orderBy:'lastName'"
    ng-controller="AccountCtrl"
    ng-click="changeTabb(1, {{employee.identifier}})">
    
    <div class="item-icon-left">
    <i class="icon ion-person"></i>
    <h3>{{employee.userCN}}</h3>
    <h5>{{employee.title}}</h5>
    <h6>{{employee.town}}</h6>
    </div>
    
    <div class="item-icon-right">
    <i class="icon ion-chevron-right icon-accessory"></i>
    </div>
    
    </ion-item>
    </ion-list> 
    </ion-content>
    </ion-view>
    

    编辑#2:我相信我已经缩小到实际上是ng-repeat的问题,而不是像我预期的乍一看的Ion-List。更新参考标签。

    干杯! 麦克

2 个答案:

答案 0 :(得分:4)

非常简单 - 你正在使用jQuery的$.ajax并且不会触发摘要周期。摘要周期是告诉Angular更新和2路绑定的原因(dumbed down)。使用提供的Angular $http模块。

$http.get(agent).then(function(response) {

});

此外,您在代码末尾调用location.reload() - 这将消除您迄今为止所做的任何客户端更改。你可能不需要那个。

答案 1 :(得分:0)

如果没有看到任何代码,您也可以尝试在路由配置中设置cache: false。见下面的例子:

.state('dashboard', {
  cache: false,
  url: '/dashboard',
  views: {
    'menuContent' : {
      templateUrl: 'templates/dashboard.html',
      controller: 'DashboardController',
    }
  }
})

如果您有任何可用的代码发布,我可以提供更多帮助。

修改 为什么需要使用$rootscope?您还应该尝试使用$scope,因为如果您想在另一个视图或控制器中使用它,您将始终可以访问localStorage中的员工信息。