Как передать переменную ответа API из сервиса на несколько контроллеров - PullRequest
0 голосов
/ 15 апреля 2020

Как передать переменную ответа API из общего сервиса на несколько контроллеров.

Я получаю данные в следующем ответе API.

$scope.responseData = reply.data;

Я использую только для API в ApiService. Здесь я использую все API, которые я использую в своем приложении.

Служба API:

app.service('apiService', ['$http', function ($http) {
   this.getData = function (userId) {
   return $http.get('myapi' + userId);
 };
}]);

Общая служба:

app.service('commonService', ['$window', function ($window) {
  apiService.getData($scope.UserId).then(function (reply) {
    $scope.responseData = reply.data;
    // ...
  });
});

Контроллеры 1, 2, 3:

app.controller('firstController', ['apiService', 'commonService',function (apiService, commonService) {
    // ...
      $scope.responseData.forEach(function (data) {
        // do something 
      })
}]);

app.controller('secondController', ['apiService', 'commonService',function (apiService, commonService) {
    // ...
      $scope.responseData.forEach(function (data) {
        // do something 
      })
}]);

app.controller('thirdController', ['apiService', 'commonService',function (apiService, commonService) {
    // ...
      $scope.responseData.forEach(function (data) {
        // do something 
      })
}]);

Я снова и снова использую один и тот же l oop ($scope.responseData) в моих контроллерах, поэтому мой приложение становится медленным. Как я могу написать код один раз и использовать его на нескольких контроллерах? Может кто-нибудь объяснить мне, как решить эту проблему?

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать $rootScope.$broadcast(/* ... */)

Что-то вроде:

app.service('commonService', ['$window', '$rootScope', function ($window, $rootScope) {
apiService.getData($scope.UserId).then(function (reply) {
    $scope.responseData = reply.data;

    $rootScope.$broadcast('onGetData', {value: reply.data});

  $scope.responseData.forEach(function (data) {
        console.log(data);
    });
    $timeout(function () {
        $scope.responseData.forEach(function (data) {
            if (data.Category == 'A') {
                console.log("A");                               
            } else if (data.Category == 'B') {
                console.log("B");                               
            } else if (card.Category == 'C') {
                console.log("C");                               
            }
        })
  });
});
});

В ваших контроллерах вы можете написать:

$scope.$on('onGetData', function(event, data){
   $scope.responseData = data.value;
})

Плункер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...