【问题标题】:Cannot save and show data from angular polling factory function only with $scope无法仅使用 $scope 保存和显示来自角度轮询工厂功能的数据
【发布时间】:2017-01-15 18:01:35
【问题描述】:

我有以下功能的服务:

    (function(){

  angular.module('app.system')
  .factory('Poller', function($http, $timeout) {
        var data = {
            eventObj: null,
            spinner:false
          };

    var poller = function() {
      $http.get('php file').then(function(r) {
      var ev = r.data;

     if(ev.length > 0)
     {
        data.eventObj = ev;
        data.spinner  = true;

        if(ev.image != null && ev.image != "")
        {
          data.eventObj = ev;
        }
    }
    else {
      data.spinner  = false;
    }

        $timeout(poller, 1000);
      });

    };
    poller();

   return {
      data :data,
   };

})()

这是我的工厂。在控制器中,我执行以下操作:

    1     $scope.dataPoller = Poller.data;
    2     var vm = this;
    3    vm.event = Poller.data.event;
    4    vm.spinner = Poller.data.spinner;

也在控制器的顶部:

.run(function(Poller) {});

第 1 行 - 我看到用户界面每 500 毫秒更改一次 但第 2-4 行根本不更新 - 仅在开始时,例如 vm.event 在第 1 行始终为空购买它没有

我该如何解决?

我需要更新控制器或其他服务中的数据并返回控制器并更新视图,轮询器当然需要每 500 毫秒发送一次新数据

【问题讨论】:

  • 请出示您的完整服务代码。
  • @AniketSinha 问题已更新

标签: angularjs controller factory


【解决方案1】:
vm.event = Poller.data.event;
vm.spinner = Poller.data.spinner;

在创建控制器时执行一次。它使用 Poller.data.event 此时的值初始化vm.event。微调器也一样。由于视图显示vm.event,并且该值永远不会改变,因此您的视图永远不会改变。

改为使用

vm.pollerData = Poller.data;

在视图中,使用

{{ vm.pollerData.event }}

每次 $http 响应返回时,angular 都会重新评估 vm.pollerData.event 的值,并且由于值已更改,因此视图将更新。

【讨论】:

  • 谢谢。会检查它,我需要从轮询器中获取数据 - 创建一个新列表并为预览模式创建另一个对象,同时处理微调器。对数据进行所有操作的地方在哪里?
  • 我无法解读这个问题。
  • 顺便说一句,这是使用 poller 的好方法吗?最后我需要有 20 个结果的列表,并且在 500 毫秒内新的
  • 应该出现并显示在列表中 - 加载程序应该出现直到。还有部分数据可用,我需要在预览模式下显示它
  • 这个问题太宽泛太模糊,无法回答。
  • thx 回答如果我有标记轮询器应该运行的复选框,但将不在列表中的数据保持在“等待”模式,直到用户删除复选框,它才能工作,我如何通过在常规运行期间以相反的方式从视图到轮询器的数据?
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签