Я изучаю Angular 2, и я пытаюсь использовать ngrx / store, но у меня есть некоторые трудности с некоторыми особыми случаями.
Пример. Я пытаюсь удалить родительский объект. Я хочу удалить также дочерние объекты.
Вот мои сущности:
export class Discussion {
id: string;
name: string;
createdAt: Date;
posts: Post[];
}
export class Post {
id: string;
title: string;
data: string;
createdAt: Date;
comments: Comment[];
}
export class Comment {
id: string;
data: string;
createdAt: Date;
}
Я использую normalizr, чтобы сгладить свое состояние, чтобы мое сохраненное обсуждение выглядело так:
{
id: "1",
name: "First dicussion",
createdAt: "...",
posts: ["1", "2", "3", "5"]
}
У меня есть 3 редуктора, один редуктор для обсуждений, еще один для сообщений и последний для комментариев. Все редукторы обрабатывают действие удаления своего собственного типа. Вот пример редуктора обсуждения:
export function reducer(state = initialState, action: discussion.Actions): State {
switch (action.type) {
case discussion.REMOVE: {
const idToRemove = action.payload;
const newEntities = state.entities;
delete newEntities[idToRemove];
return Object.assign({}, state, {
entities: newEntities
});
}
}}
Мои действия выглядят так:
export class RemoveAction implements Action {
readonly type = REMOVE;
/**
* Constructor
* @param payload The id of the discussion to remove
*/
constructor(public payload: string) { }
}
Когда я удаляю обсуждение, я хочу удалить сообщения, связанные с обсуждением, и эффект сообщений удалит комментарии, связанные с удаленными сообщениями. Я использовал эффекты ngrx do this, поэтому я использовал этот эффект:
@Effect()
removeDiscussion: Observable<Action> = this._actions
.ofType(dicussion.REMOVE)
.map((action: discussion.RemoveAction) => action.payload)
.mergeMap(discId => {
// How to get posts from discussion id ???
// Fire related Actions
return [
new posts.RemoveAction(postsToRemove)
];
});
Мой вопрос в том, как удалить сообщения из идентификатора обсуждения?
Спасибо за прочтение.