看起来 poller.get 是一个异步调用。所以当你调用 dataToSplice.splice(0,5); 时dataToSplice 中可能不存在数据。
这就是为什么 splice 在 Promise.then() 之外不起作用的原因
//在轮询器之外,我想访问数据并将它们拼接 //
将它们传递给 ng-grid dataToSplice.splice(0,5);//这不会
work $scope.myData.splice(0,5);//这也不起作用
现在你有两个选择 -
继续按照选项 1 的方式进行操作
或设置一个单独的事件处理程序(这可以在同一个控制器或另一个控制器中完成)并在 pollerAnalyticsHistory.promise.then 内调用 $emit
看我关于如何处理事件的帖子(通过 $on 和 $emit)Angular Js 新手 - 控制器视图中的链接触发另一个控制器操作 https://stackoverflow.com/questions/25301581/angular-js-newbie-link-in-a-controller-view-that-triggers-another-controller-a/25305951#25305951
编辑:(这应该有效)-
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");
}
}]);
编辑(8/16/2014):
在这里查看:http://plnkr.co/edit/xkQM7NA91JlmHcxat0Qn?p=preview http://plnkr.co/edit/xkQM7NA91JlmHcxat0Qn?p=preview
编辑(2014年8月18日):
忘记解除监听者的绑定。更新了。