Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs如何从外部访问范围数据_Angularjs_Angularjs Scope_Scope_Ng Grid - Fatal编程技术网

Angularjs如何从外部访问范围数据

Angularjs如何从外部访问范围数据,angularjs,angularjs-scope,scope,ng-grid,Angularjs,Angularjs Scope,Scope,Ng Grid,我有一个轮询器功能,每10000ms轮询一次数据,这很好,但是我需要能够从外部访问变量,以便使用splice功能 服务代码: 'use strict'; //service to get data for analytics page angular .module ('myApp') .factory('Analyticshistory', function ($resource) { return $resource('analytics_history.js

我有一个轮询器功能,每10000ms轮询一次数据,这很好,但是我需要能够从外部访问变量,以便使用
splice
功能

服务代码:

'use strict';
//service to get data for analytics page
angular
    .module ('myApp')
    .factory('Analyticshistory', function ($resource) {
        return $resource('analytics_history.json',{}, {'query': {method: 'GET', isArray: false}});
      });
控制器代码:

   'use strict';
    angular
        .module('myApp')
        .controller('analyticshistoryCtrl', ['$scope', 'poller', 'Analyticshistory', function ($scope, poller, Analyticshistory) {

            var dataToSplice;
            var pollerAnalyticsHistory;
            pollerAnalyticsHistory = poller.get (Analyticshistory, {delay: 10000});
            pollerAnalyticsHistory.promise.then (null, null, function (data) {


                //this works fine but it splices 
                //data every 10000ms which is not good
                $scope.myData = data.analytics.splice(0,5);


               //I'm trying this to access this outside
               $scope.myData = data.analytics;
               dataToSplice = $scope.myData;

              });

             //outside the poller here I want to access data and splice them
             //to pass them into to ng-grid
             dataToSplice.splice(0,5);//this does not work
             $scope.myData.splice(0,5);//this doe not work either


             $scope.gridOptions = {
                data: 'myData',
                columnDefs: 'columns'
             }
 }]);
我做错了什么

非常感谢你的帮助


PLUNKER:

看起来像poller.get是一个异步调用。所以在调用dataToSplice.splice(0,5)时;dataToSplice中可能不存在数据

这就是为什么splice在承诺之外不起作用的原因

//在轮询器之外,我想访问数据并将它们拼接到//上 将其传递至ng网格数据拼接(0,5)//这是不可能的 工作$scope.myData.splice(0,5)//这也不行

现在你有两个选择-

  • 继续按照选项1的方式进行操作

  • 或者设置一个单独的事件处理程序(可以在同一个控制器或另一个控制器中完成),并在pollerAnalyticsHistory.promise内调用$emit

  • 请看我关于如何处理事件的帖子(通过$on和$emit)

    编辑:(这应该有用)-

    编辑(8/16/2014): 在这里查看:

    编辑(8/18/2014):
    忘了解开听者的带子。plunk已更新。

    您可以在服务中使用$rootscope.broadcast,然后通过$scope在控制器中侦听它。在

    上,所有这些代码都在一个控制器中?是的,在同一个控制器中,您应该将池转换为一个服务,然后在需要时注入控制器对不起,我不知道,但我不知道如何实施,否则你的解决方案会奏效吗?请参阅上面的服务。我会用上面的代码实现您的解决方案吗?当然,给我一些时间。我现在需要做点什么。我感谢你的帮助。普朗克补充道。因此,每次返回摘要页面时,都会拼接数据:(你能帮我回答我的问题吗?添加了Plunker。我真的很感谢你的帮助。你能帮我回答我的问题吗?添加了Plunker。我真的很感谢你的帮助。我已经更新了你的plunk,它现在可以工作了,这正是我在回答中所描述的。你的解决方案不起作用。它只在你为t加载页面时起作用第一次。现在,如果单击平台选项卡,然后导航回摘要页面,数据将再次拼接。如果重复此操作或在页面之间单击几次,数据将完全丢失/拼接,表为空:(忘记添加此行-$scope.$on(“$destroy”,拼接句柄);plunk已更新-。请退房。
    angular
        .module('myApp')
        .controller('analyticshistoryCtrl', ['$rootScope', '$scope', 'poller', 'Analyticshistory', function ($rootScope, $scope, poller, Analyticshistory) {
    
    
    $rootScope.$on("SpliceHandler", function(evt, next, current) {
               $scope.myData.splice(0,5);
    }
    
    pollerAnalyticsHistory.promise.then (null, null, function (data) {
    
               //I'm trying this to access this outside
               $scope.myData = data.analytics;
               dataToSplice = $scope.myData;
    
    $scope.$emit("SpliceHandler");
    }
    
    }]);