Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Memulakan Perkhidmatan AngularJS dengan Data Asynchronous?

Bagaimana untuk Memulakan Perkhidmatan AngularJS dengan Data Asynchronous?

Patricia Arquette
Patricia Arquetteasal
2024-12-03 17:00:15711semak imbas

How to Initialize AngularJS Services with Asynchronous Data?

AngularJS: Memulakan Perkhidmatan dengan Data Asynchronous

Suntikan kebergantungan awal boleh menimbulkan cabaran apabila berurusan dengan sumber data tak segerak. Untuk menangani isu ini, AngularJS menyediakan beberapa pendekatan untuk menyepadukan operasi tak segerak ke dalam perkhidmatan.

1. Menggunakan $routeProvider.when('/path',{ resolve:{...}

Kaedah ini mendedahkan janji dalam perkhidmatan, menjadikan promise approach lebih bersih. Sifat resolve dalam konfigurasi laluan memastikan bahawa kebergantungan diselesaikan sebelum pengawal dibuat seketika.

// 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 Pemintas

Pemintas HTTP membolehkan anda menyambung ke dalam proses permintaan/tindak balas HTTP dan melakukan operasi tak segerak sebelum atau selepas setiap permintaan Anda boleh menggunakan ini untuk memulakan perkhidmatan anda sebaik sahaja respons tersedia.

// 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. Menggunakan Janji dan $q

Janji boleh digunakan untuk mewakili operasi tak segerak dan menyelesaikan kebergantungan sebaik sahaja ia tersedia Perkhidmatan $q menyediakan kaedah untuk mencipta dan memanipulasi janji.

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

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

  // ...
  return {
    promise: deferred.promise,
    // ...
  };
});

Dengan memanfaatkan teknik ini, anda boleh memulakan perkhidmatan dengan data tak segerak dalam AngularJS dengan berkesan. memastikan kebergantungan diselesaikan dengan betul sebelum instantiasi pengawal.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Perkhidmatan AngularJS dengan Data Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn