2 votes

Injecter des services Angular dans les créateurs d'actions Redux

Une idée pour injecter des services angulaires comme $http ou $q pour les utiliser dans les créateurs d'actions Redux ? J'utilise actuellement bibliothèque tierce pour effectuer des requêtes HTTP. L'utilisation de ce créateur d'action en tant que service angulaire ne me convient pas, car il peut être appelé à partir de conditions non angulaires. De plus, j'utilise ng-redux pour connecter Angular à Redux.

Mon créateur d'action ressemble maintenant à ceci :

export function fetchContentItems() {
  return (dispatch) => {
    dispatch(requestContentItems());

    return axios(API_URL)
      .then(({ data }) => {
        dispatch(setContentCount(data.count));
        dispatch(receiveContentItems(data.items));
      });
  };
}

Les conditions non angulaires dont j'ai parlé précédemment :

export function setFilterOption(option, value) {
  return (dispatch, getState) => {
    dispatch({
      type: SET_FILTER_OPTION,
      option,
      value
    });

    dispatch(fetchContentItems());
  };
}

0voto

creimers Points 2124

C'est un peu tard, mais c'est ce que j'ai fini par faire (ES6) :

Créateurs d'actions à l'intérieur d'un service angulaire :

class ActionService {
  constructor($http, $q) {
    this.$http = $http;
    this.$q = $q;
  }

  fetchRequest() {
    return {
      type: 'REQUEST',
      isFetching: true
    };
  }

   fetchSuccess(result) {
    return {
      type: 'REQUEST',
      isFetching: true,
      result: result
    };
  }

  fetchMyResource() {
    return dispatch => {
      dispatch(this.retchRequest())
      return this.$http.get('/my-resource')
      .then(response => {
        return dispatch(this.fetchSuccess(response));
      }
    }
  }

}

Ensuite, dans votre contrôleur, vous pouvez faire quelque chose comme ceci :

class Controller{
  constructor($ngRedux, ActionService) {
    this.$ngRedux = $ngRedux;
    this.ActionService = ActionService;
  }

  getMyResource() {
    this.$ngRedux.dispatch(this.ActionService.fetchMyResource());
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X