Tôi sẽ mở đầu điều này với thực tế là tôi thực sự không biết nếu đây là cách tốt nhất để đạt được những gì tôi đang làm và tôi rất cởi mở với những đề xuất tốt hơn.Đảm bảo một bộ điều khiển AngularJS tải trước
Tôi có hệ thống tài khoản người dùng sử dụng OAUTH2
để tìm kiếm thông tin người dùng trong cơ sở dữ liệu của tôi và lưu nó dưới dạng biến, $rootScope.userInfo
. Điều này nằm trong một bộ điều khiển được gắn vào ứng dụng của tôi body
; ở đây tôi đã nghĩ rằng bộ điều khiển mức cao nhất sẽ tải trước những người sống bên trong nó, nhưng rõ ràng là không.
Nếu tôi tải chế độ xem cố gắng truy cập đối tượng $rootScope.userInfo
này trước khi mainCtrl
của tôi có cơ hội tải nó vào từ cơ sở dữ liệu của tôi, nó sẽ phát ra lỗi javascript và lỗi Angular
.
Để tham khảo, đây là một ý tưởng thô của mẫu:
<body ng-controller="mainCtrl">
<header>Content</header>
<div class='main-view' ng-controller="userProfile">
<p>{{user.name}}</p>
<p>{{user.email}}</p>
</div>
</body>
Tôi tải $rootScope.userInfo
trong mainCtrl
như thế này:
$http.get('/api/users/' + $cookies.id).
success(function(data) {
$rootScope.userInfo = data.user[0];
console.log("User info is:");
console.log($rootScope.userInfo);
$scope.status = 'ready';
});
Sau đó, để kiểm soát userProfile
của tôi, tôi làm:
function userProfile($scope, $cookies, $http, $routeParams, $rootScope){
if($scope.status == 'ready'){
$scope.user = $rootScope.userInfo;
console.log("Double checking user info, here it is:");
console.log($rootScope.userInfo);
}
}
Nếu tôi đến từ một trang khác trong ứng dụng wh ich không gọi số $rootScope.userInfo
, API có đủ thời gian để tìm kiếm và trang userProfile
của tôi hoạt động tốt. Tuy nhiên, nếu thực hiện làm mới toàn bộ trang, thì $rootScope.userInfo
không có thời gian tải và tôi gặp lỗi.
Làm cách nào để khắc phục sự cố này?
Điều này khá gần, tôi thích ý tưởng sử dụng nó như một dịch vụ. Tuy nhiên nó không giải quyết được vấn đề trật tự tải. Tôi đã thiết lập dịch vụ, nhưng nó vẫn tải bộ điều khiển trước khi dịch vụ đã trả về bất kỳ dữ liệu nào! ý tưởng? – Jascination
Tôi đã thực hiện câu hỏi được cập nhật tại đây: http://stackoverflow.com/questions/18477711/force-angularjs-service-to-return-data-before-loading-controller Tôi sẽ chấp nhận câu trả lời này là câu trả lời hầu hết công việc, nhưng cũng cảm thấy tự do để trả lời công việc đó. – Jascination