Tôi đang sử dụng một số dữ liệu từ dịch vụ RESTful trong nhiều trang. Vì vậy, tôi đang sử dụng các nhà máy góc cạnh cho điều đó. Vì vậy, tôi bắt buộc phải lấy dữ liệu một lần từ máy chủ và mỗi khi tôi nhận được dữ liệu với dịch vụ được xác định đó. Giống như một biến toàn cầu. Dưới đây là các mẫu:
var myApp = angular.module('myservices', []);
myApp.factory('myService', function($http) {
$http({method:"GET", url:"/my/url"}).success(function(result){
return result;
});
});
Trong điều khiển của tôi Tôi đang sử dụng dịch vụ này như:
function myFunction($scope, myService) {
$scope.data = myService;
console.log("data.name"+$scope.data.name);
}
của nó làm việc tốt cho tôi theo yêu cầu của tôi. Nhưng vấn đề ở đây là, khi tôi tải lại trang web của tôi, dịch vụ sẽ được gọi lại và yêu cầu máy chủ. Nếu ở giữa một số chức năng khác thực hiện mà phụ thuộc vào "dịch vụ được xác định", Nó cho lỗi như "cái gì đó" là không xác định. Vì vậy, tôi muốn chờ trong kịch bản của tôi cho đến khi dịch vụ được tải. Làm thế nào tôi có thể làm điều đó? Có anyway làm điều đó trong angularjs?
Điều này giải quyết được vấn đề của tôi !!! Đối với bất kỳ ai khác, tôi có một trình đơn thả xuống cần dữ liệu từ cuộc gọi ajax, vì vậy khi phạm vi được tạo, dữ liệu không có sẵn. Với sự trì hoãn này, phạm vi có thể được gán để có dữ liệu đến từ cuộc gọi ajax. –
@mikel: Tôi có một câu hỏi khác ở đây. Cuộc gọi myFuction() của bạn sẽ trở lại ngay lập tức nhưng lời hứa đó. Sau đó() sẽ gọi sau. Tôi cần phải làm gì để cuộc gọi myFuction() không trở lại cho đến khi hàm .then() kết thúc thực hiện. 'hàm myFunction ($ scope, myService) { var myDataPromise = myService.getData(); myDataPromise.then (hàm (kết quả) { $ scope.data = result; console.log ("data.name" + $ scope.data.name); }); console.log ("Điều này sẽ được in trước data.name bên trong sau đó. Và tôi không muốn điều đó."); } ' – Sujoy