【问题标题】:Ionic view not refreshing data from API离子视图不从 API 刷新数据
【发布时间】:2016-09-03 01:51:10
【问题描述】:

我们有一个 Ionic 应用程序,它轮询 node/express API。

当应用启动时,它会从 API 中正确获取 JSON 数据。当我们更新数据并再次从 Ionic 应用程序获取数据时,我们仍然会看到应用程序启动时的旧数据。

我们尝试过以多种方式清除 Angular 缓存和 Ionic 缓存,但这似乎没有什么不同。

我们尝试过的事情是:

在模板上$ionicConfigProvider.views.maxCache(0);cache-view="false",在状态上设置cache: false,尝试通过$state.go($state.currentState, {}, {reload : true});$ionicHistory.clearHistory();$ionicHistory.clearHistory();$route.reload$window.location.reload访问状态。

控制器:

function contactsController(Contacts, $stateParams) {

  var vm = this;
  var params = $stateParams.id;
  Contacts.getAllContacts.then(function success(response) {
    vm.data = response.data;
    vm.selectedContact = response.data[params];
  });
}

工厂

function contactsFactory($http, $stateParams) {
  return {
    getAllContacts: $http.get('https://api-call'),
    update: function(url) {
      $http.patch('https://api-call/update', [$stateParams.id, url]);
    },
  };
}

快递后端

app.get('/', function (req, res) {
  ref.once("value", function(snapshot){
    res.send(snapshot.val());
  });
});

app.patch('/update', function(req, res) {
  var id = req.body[0];
  ref.child(id).update({"imageURL": req.body[1]});
});  

谢谢

【问题讨论】:

  • 您是否尝试在路由和视图上禁用缓存?
  • 是的,我们做到了,谢谢。我刚刚更新了帖子以包含我们已经尝试过的所有内容。

标签: angularjs node.js express ionic-framework firebase-realtime-database


【解决方案1】:
  • 像这样修改你的视图

<ion-view cache-view="false" view-title="My Title!">

【讨论】:

  • 谢谢,实际上我们已经尝试过了,我刚刚更新了帖子,列出了我们已经尝试过的所有内容。
  • 试试这个,但这不是解决方案,但它会刷新页面并应用更改,粘贴此函数并通过 ng-init="doRefresh()" $scope.doRefresh = function( ) { $scope.$broadcast('scroll.refreshComplete'); };
  • 谢谢,我们刚试过这个,也试过把这个函数放在一个 ng-click 事件上,它会暂时清除数据,然后用旧数据再次刷新。
  • 只需评论您的代码并运行它并尝试一下,我希望它会起作用 Contacts.getAllContacts.then(function success(response) { $scope.getdata = function() { setTimeout(function() { $scope.$apply(function() { //将这个包裹在 $apply vm.data = response.data; vm.selectedContact = response.data[params]; }); }, 2000); } $scope.getdata (); });
  • 好的,我们已经尝试过了,不幸的是它仍然给我们同样的结果。感谢您的帮助。
【解决方案2】:

尝试console.log(vm) 并验证是否获得了更新的数据。如果它只是尽管记录了更新的数据但没有更新的视图,我会尝试以下操作以及cache-view="false"

$scope.apply(function (){
   // update your view here
   vm.data = response.data;
   vm.selectedContact = response.data[params];
});

【讨论】:

  • console.logging vm 显示更新后的数据永远不会获取,vm 总是包含应用启动后第一次从 API 获取的数据。
  • 您能否尝试使用service 而不是factory 作为您的contactsFactory
  • 我们尝试过使用服务而不是工厂,不幸的是它似乎产生了完全相同的结果。谢谢。
【解决方案3】:

通过使用 Firebase 的 once(),除了第一个回调之外,您已经有效地删除了附加到 value 的所有回调:

只监听一个指定事件类型的事件,然后 停止听

尝试改用on()

app.get('/', function (req, res) {
  ref.on("value", function(snapshot){
    res.send(snapshot.val());
  });
});

可能您的问题根本与缓存无关...

【讨论】:

  • 我们的API调用好像你说的只发生一次,不管我们调用多少次。但是,当使用 on() 而不是 once() 时,后端在访问时会崩溃。这可能表明其他地方的问题导致了该问题。谢谢。
【解决方案4】:

当我在 android 设备上安装 Ionic 2 Open layers map 时,我可以在 android 屏幕上成功看到 Open layers map。但是当我关闭它并再次打开应用程序时,我看不到地图。为了解决这个问题,我做的是:我卸载应用程序,重新启动我的设备,然后重新安装应用程序,然后我可以看到地图。 请为我提供永久修复。

【讨论】:

    【解决方案5】:

    将它放在应用程序配置中对我有用

    $ionicConfigProvider.views.maxCache(0);
    

    $ionicConfigProvider 配置中的依赖项。

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2012-09-03
      • 2015-06-22
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多