Как создать угловой сервис с несколькими ресурсами? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть угловой сервис, основанный на средних ценах за аренду. Первоначально это выглядело так:

(function () {
  'use strict';

  angular
    .module('rents.services')
    .factory('RentsService', RentsService);

  RentsService.$inject = ['$resource', '$log'];

  function RentsService($resource, $log) {

    var Rent = $resource(
      '/api/rents/:rentId',
      {
        rentId: '@_id'
      },
      {
        update: {
          method: 'PUT'
        },
        getByCarId:
        {
          method: 'POST',
          params: {
            rentId: 'bycar'
          },
          isArray: true,
          hasBody: true,
          requestType: 'json',
          responseType: 'json'
        }
      }
    );

    angular.extend(Rent.prototype, {
      createOrUpdate: function () {
        var rent = this;
        return createOrUpdate(rent);
      }
    });

    return Rent;

    // and all other function that are the same as down below
}());

Затем я добавил второй ресурс

(function () {
  'use strict';

  angular
    .module('rents.services')
    .factory('RentsService', RentsService);

  RentsService.$inject = ['$resource', '$log'];

  function RentsService($resource, $log) {

    var Rent =
      {
        basic: $resource(
          '/api/rents/:rentId',
          {
            rentId: '@_id'
          },
          {
            update: {
              method: 'PUT'
            },
            getByCarId:
            {
              method: 'POST',
              params: {
                rentId: 'bycar'
              },
              isArray: true,
              hasBody: true,
              requestType: 'json',
              responseType: 'json'
            }
          }
        ),
        carUsageStats: $resource(
          '/api/rents/car_usage'
        )
      };

    angular.extend(Rent.basic.prototype, {
      createOrUpdate: function () {
        var rent = this;
        return createOrUpdate(rent);
      }
    });

    return Rent;

    function createOrUpdate(rent) {
      if (rent._id) {
        return rent.$update(onSuccess, onError);
      } else {
        return rent.$save(onSuccess, onError);
      }

      // Handle successful response
      function onSuccess(rent) {
        // Any required internal processing from inside the service, goes here.
      }

      // Handle error response
      function onError(errorResponse) {
        var error = errorResponse.data;
        // Handle error internally
        handleError(error);
      }
    }

    function handleError(error) {
      // Log error
      $log.error(error);
    }
  }
}());

Пока я не добавил второй ресурс, эта функция разрешения для создания новой ренты работала нормально

  newRent.$inject = ['RentsService'];

  function newRent(RentsService) {
    return new RentsService();
  }

Но когда я добавил второй ресурс (и мне пришлось обратиться к тому, который я хочу, используя имя свойства - я не могу использовать Rent.query (), но Rent.basic.query ()) создание новой Rent больше не работает. Я добавил консольный журнал, и код перестает выполняться в строке var rent = new RentsService (). Запросы работают нормально. Как правильно создать новый объект, используя сервис с несколькими ресурсами?

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