有什么想法如何注入$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());
}
}