Angularjs如何从外部访问范围数据
我有一个轮询器功能,每10000ms轮询一次数据,这很好,但是我需要能够从外部访问变量,以便使用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
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)//这也不行 现在你有两个选择-
忘了解开听者的带子。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");
}
}]);