0

给什么我工作的一个简短的概要:伍重复不更新,直到刷新页面

这个程序是一个电话簿,使得调用我们的后端系统,并返回一个JSON有效载荷,然后将其解析并存储到本地存储以便离线访问,然后数据以简单的主屏幕格式显示。

举个简单的工作流程:

  1. 用户登录
  2. 呼叫通过Ajax请求到后端的用户的帐户下由
  3. 数据存储到本地存储
  4. 数据是添加到$ rootScope.allEmployeeInformation变量
  5. Ion-List反映存储在主屏幕上的$ rootScope.allEmployeeInformation变量中的数据。

我的问题就出在这里:

在数据记录之后被拉动并妥善保存,但直到刷新页面或者通过拉刷新功能我已经实现了离子列表不显示数据,重新同步按钮或​​重新启动应用程序。

有没有什么方法可以确保这些数据片段在用户不需要刷新页面的情况下显示?

将很乐意提供所需的任何信息。谢谢你们的帮助!

编辑,有一些代码更新的要求:

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。更新参考标签。

干杯! 迈克

+0

您的ajax请求正在将数据转储到rootScope中,但从未更新ng-repeat正在使用的allEmployeeInformation变量。根本没有理由涉及根域。 –

回答

4

很简单 - 你正在使用jQuery的$.ajax,并且不会触发摘要循环。摘要循环是告诉Angular更新和2路绑定本质上(愚蠢)。使用提供的Angular $http模块。这将摆脱任何客户端的改变,到目前为止您所做 -

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

}); 

而且,你在你的代码的调用结束location.reload()。你可能不需要那个。

+0

感谢@tymeJV的回应 - 看看这是否解决了我的问题,并报告给其他人将来也会遇到同样的问题。意外地忘记删除paste.in上的location.reload()...很好!谢谢! –

+0

@MichaelAmato - 没问题 - 同样,未来的提示 - 在这里发布你的代码,而不是在一个pastebin - 它会得到更多的观众,并遵循发布规则:D – tymeJV

+0

Thanks @tymeJV!将为未来做...业余的错误,对不起!只是更新了代码以使用$ http.get而不是Ajax,现在看起来安全包装比我的团队用来访问我们的后端代理造成了问题。我们对用户进行身份验证,然后包装器会自动将任何所需的cookie附加到ajax请求以访问所需的后端代理。将继续调查。 –

0

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

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

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

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

+0

感谢您的回复@ user1237122! 我刚刚使用一些代码更新了我的文章,以了解您是否可以提供更多见解。在ajax请求完成将代码放入无限循环的刷新之后,似乎会强制刷新,因为每次刷新应用程序时都需要执行ajax请求,以确保获得最新的员工信息。再次感谢! –

+0

刚刚意识到,我忘了在状态结果中将设置缓存添加到false,即使在允许先前显示信息的刷新之后也没有显示任何数据。 –

+0

“强制重新加载页面”对于Angular应用程序来说是一个糟糕的策略 - SPA的重点在于当数据更新时不需要重新加载页面。 –