Я использую ngrx 6 и angular 6, мой код выглядит следующим образом:
эффекты.ts
import * as fromProjectMemberActions from '../project-member/project-member.actions';
import * as fromProjectMemberGraphQL from '../../members/members.graphql';
@Effect({dispatch: false})
loadProjectMember$ = this.actions$.pipe(
ofType(fromProjectMemberActions.ProjectMemberActionTypes.GetProjectMembers),
tap(
action => {
this.apollo.watchQuery({
query: fromProjectMemberGraphQL.GET_ALL_PROJECT_MEMBERS,
variables: {
projectID : // Project ID is needed
}
}).valueChanges.subscribe((response: any) => {
console.info(response)
this.store.dispatch(
new fromProjectMemberActions.UpsertProjectMembers({
projectMembers: response.data.findAllProjectMember
})
)
this.store.dispatch(
new fromProjectMemberActions.DoneLoadingProjectMembers()
)
})
}
)
);
project-member.actions.ts
export class GetProjectMembers implements Action {
readonly type = ProjectMemberActionTypes.GetProjectMembers;
}
export class UpsertProjectMembers implements Action {
readonly type = ProjectMemberActionTypes.UpsertProjectMembers;
constructor(public payload: { projectMembers: ProjectMember[] }) {}
}
members.graphql.ts
import gql from 'graphql-tag';
export const GET_ALL_PROJECT_MEMBERS = gql`
query getAllProjectMembers($projectID: Long!) {
findAllProjectMembers(projectId: $projectID) {
id
memberId
memberType
}
}
`;
Данный API-интерфейс graphql выглядит следующим образом на игровой площадке graphql
query{
findAllProjectMembers(projectId: projectID) {
id
memberId
memberType
}
}
Если вы замените projectID выше на число, например: 2, он будет успешно запрашивать данные.
URL-адрес, по которому идентификатор проекта, который будет использоваться под номером 1, передается через следующий URL-адрес
http://localhost/project-manager/view-project/2/members
Мне нужна помощь, чтобы извлечь этот идентификатор проекта, указанный выше, и использовать его в файле эффектов для запроса списка участников.





Я бы сказал.
// обновляем project-member.actions.ts
export class GetProjectMembers implements Action {
readonly type = ProjectMemberActionTypes.GetProjectMembers;
constructor(public payload: { projectId: number }) {}
}
// и обновляем эффект
@Effect({dispatch: false})
loadProjectMember$ = this.actions$.pipe(
ofType(fromProjectMemberActions.ProjectMemberActionTypes.GetProjectMembers),
map((action: any) => action.payload),
tap(
payload => {
this.apollo.watchQuery({
query: fromProjectMemberGraphQL.GET_ALL_PROJECT_MEMBERS,
variables: {
projectID : payload.projectId
}
}).valueChanges.subscribe((response: any) => {
console.info(response)
this.store.dispatch(
new fromProjectMemberActions.UpsertProjectMembers({
projectMembers: response.data.findAllProjectMember
})
)
this.store.dispatch(
new fromProjectMemberActions.DoneLoadingProjectMembers()
)
})
}
)
);
// может быть в компоненте или в том месте, где вы отправляете действие Pass projectId
subscribe to router {
this.store.dispatch(new GetProjectMembers({ projectId })
}
где вы отправляете действие типа (fromProjectMemberActions.ProjectMemberActionTypes.Get ProjectMembers) в компоненте. ?