首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能仅用$scope保存和显示角轮询工厂函数中的数据。

不能仅用$scope保存和显示角轮询工厂函数中的数据。
EN

Stack Overflow用户
提问于 2017-01-15 18:01:35
回答 1查看 62关注 0票数 0

我的服务职能如下:

代码语言:javascript
复制
    (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,
   };

)()

这是我的工厂。在控制器中,我所做的事情如下:

代码语言:javascript
复制
    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 it更改一次,但是第2-4行根本不更新--只有在开始时才更新,例如,第1行中的vm.event总是空的,它没有更新。

我该怎么解决呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-15 22:36:35

代码语言:javascript
复制
vm.event = Poller.data.event;
vm.spinner = Poller.data.spinner;

在创建控制器时,只执行一次。它用Poller.data.event具有的值将化为泡影。旋转器也一样。由于视图显示vm.event,而且由于该值从未更改,所以您的视图不会更改。

相反,使用

代码语言:javascript
复制
vm.pollerData = Poller.data;

在视图中,使用

代码语言:javascript
复制
{{ vm.pollerData.event }}

每当$http响应返回时,角将重新计算vm.pollerData.event的值,并且由于值已经更改,视图将更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41664427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档