我遇到了我的統計控制器的異步問題。我有一個控制器查詢數據庫並返回對象。在這個控制器中,我使用過濾器來獲取平臺Facebook的過濾器,並將其放入$rootScope.facebookObjects
。角度承諾
第一控制器:
app.controller('statsCtrl', function ($scope, $log, $http, $timeout, $filter, Data, $rootScope) {
Data.get('stats').then(function(data){
$scope.stats = data.data;
$scope.currentPage = 1; //current page
$scope.filteredItems = $scope.stats.length; //Initially for no filter
$scope.totalItems = $scope.stats.length;
$scope.list_pages = [
{
id: '5',
name: '5'
}, {
id: '10',
name: '10'
}, {
id: '20',
name: '20'
}, {
id: '50',
name: '50'
}, {
id: '100',
name: '100'
}
];
$scope.maxSize = 5;
$rootScope.facebookObjects = $filter('filter')($scope.stats, { platform: "facebook" });
$rootScope.twitterObjects = $filter('filter')($scope.stats, { platform: "twitter" });
});
$scope.setPage = function(pageNo) {
$scope.currentPage = pageNo;
};
$scope.filter = function() {
$timeout(function() {
$scope.filteredItems = $scope.filtered.length;
}, 10);
};
$scope.sort_by = function(predicate) {
$scope.predicate = predicate;
$scope.reverse = !$scope.reverse;
};
});
我有使用$rootScope.facebookObjects
來填充圖表的第二控制器。問題是我需要等到$rootScope.facebookObjects
有一個值。目前我的控制檯日誌顯示未定義。我正在看諾言,但我有點不確定哪個控制器使用它,以及如何正確使用它。
第二個控制器:
app.controller("PieCtrl", function ($scope, $rootScope, $timeout, $log) {
$log.log('facebook - '+$rootScope.facebookObjects.length);
});
如果你想分享控制器之間的數據沒有數據連接到'$ rootScope',使用服務來代替。 – Ankh
我對角度很陌生。你能告訴我如何做到這一點? – Jason
嘗試[類似這樣的東西](http://stackoverflow.com/a/12513509/2043204) – Ankh