> 웹 프론트엔드 > JS 튜토리얼 > 비동기 데이터로 AngularJS 서비스를 초기화하는 방법은 무엇입니까?

비동기 데이터로 AngularJS 서비스를 초기화하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-03 17:00:15
원래의
673명이 탐색했습니다.

How to Initialize AngularJS Services with Asynchronous Data?

AngularJS: 비동기 데이터로 서비스 초기화

초기 종속성 주입은 비동기 데이터 소스를 처리할 때 문제를 일으킬 수 있습니다. 이 문제를 해결하기 위해 AngularJS는 비동기 작업을 서비스에 통합하기 위한 여러 가지 접근 방식을 제공합니다.

1. $routeProvider.when('/path',{ 해결:{...}

이 메서드를 사용하면 서비스 내에서 약속을 노출하여 약속 접근 방식을 더 깔끔하게 만듭니다. 경로 구성 내의 해결 속성은 다음을 보장합니다. 컨트롤러가 인스턴스화되기 전에 종속성이 해결됩니다.

// Service
app.service('MyService', function($http) {
  var myData = null;
  return {
    promise: $http.get('data.json'),
    ...
  }
);

// Route Config
app.config(function($routeProvider){
  $routeProvider
    .when('/', {
      ...
      resolve: {
        MyServiceData: ['MyService', function(MyService) {
          return MyService.promise;
        }]
      }
    })
  });

// Controller
app.controller('MainCtrl', function($scope, MyService) {
  $scope.data = MyService.doStuff();
  // ...
});
로그인 후 복사

2. 인터셉터

HTTP 인터셉터를 사용하면 HTTP 요청/응답 프로세스에 연결하고 각 요청 전후에 비동기 작업을 수행할 수 있습니다. 응답이 제공되면 이를 사용하여 서비스를 초기화할 수 있습니다.

// Interceptor
app.factory('MyInterceptor', function ($q, $rootScope) {
  var serviceData = null;

  return {
    response: function(response) {
      if (response.config.url === 'data.json') {
        serviceData = response.data;
        $rootScope.$broadcast('serviceDataReady', serviceData);
      }
      return response;
   }
});

// Apply interceptor
app.config(['$httpProvider', function($httpProvider) {
  $httpProvider.interceptors.push('MyInterceptor');
}]);

// Service
app.service('MyService', function($rootScope) {
  $rootScope.$on('serviceDataReady', function(event, data) {
    myData = data;
  });
  
  // ...
});
로그인 후 복사

3. Promise와 $q를 사용하면

Promise를 사용할 수 있습니다. $q 서비스는 Promise를 생성하고 조작하는 방법을 제공합니다.

app.service('MyService', function($http, $q) {
  var deferred = $q.defer();

  $http.get('data.json').then(function(response) {
    deferred.resolve(response);
  });

  // ...
  return {
    promise: deferred.promise,
    // ...
  };
});
로그인 후 복사

이러한 기술을 활용하면 AngularJS에서 비동기 데이터로 서비스를 효과적으로 초기화할 수 있습니다. , 컨트롤러 인스턴스화 전에 종속성이 제대로 해결되었는지 확인합니다.

위 내용은 비동기 데이터로 AngularJS 서비스를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿