有什么想法如何注入$http$q这样的角度服务以在Redux动作创建者中使用它们?现在,我正在使用third-party library发出HTTP请求。将这个动作创建者用作角度服务不适合我,因为可以从非角度条件中调用它。另外,我正在使用ng-redux将Angular与Redux连接。

现在,我的动作创建者如下所示:

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

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


我之前谈到的非角度条件:

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

    dispatch(fetchContentItems());
  };
}

最佳答案

可能迟到了,但这是我最终要做的(ES6):

角度服务内的动作创建者:



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));
      }
    }
  }

}




然后,在您的控制器中,您可以执行以下操作:



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

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

09-25 16:58