案例是我希望NavMenuComponent
中有一个带有博客的组合框(选择)。它的快速导航体验。
目前我有第二个阵列blogs: IBlogs[]
这是不好的实践,但无论如何。
我现在的问题是,当我添加/删除任何博客时,组合框没有得到更新。这是因为我正在使用BlogComponent>blogs[]
而不是NavMenuComponent>blogs[]
我必须努力刷新才能让它发挥作用!任何更好的方法?我可以从另一个组件强制更新数组吗? [没有共享服务]
我可以将它们放入共享服务但我不喜欢这个想法。因为在BlogComponent
中,我必须使用sharedService.getBlogs()
代替blogService.getBlogs()
。
有什么想法吗?
答案 0 :(得分:0)
例如:
export enum BlogAction{
CREATE,
DELETE
}
export Blog{
id: number;
name: string;
}
export class BlogActionModel{
action: BlogAction;
blog: Blog;
}
@Injectable()
export class BlogService{
private blogPoster: Subject<BlogActionModel> = new Subject<BlogActionModel>();
public $blogPosted: Observable<BlogActionModel> = this.blogPoster.asObservable();
create(blog: Blog): void{
this.blogResource.saveToBackend(blog); //do save routine
this.blogPoster.next({
action: BlogAction.CREATE,
blog: blog
});
}
//implement `update` and `delete` actions in same way
}
@Component({})
export class NavMenuComponent implements OnInit{
private blogs: Blog[] = [];
constructor(private blogService: BlogService){}
ngOnInit(): void{
this.blogService.$blogPosted.subscribe((blogAction: BlogActionModel) => {
if(blogAction.action === BlogAction.CREATE){
this.blogs.push(blogAction.blog);
}else if(blogAction.action === BlogAction.DELETE){
//do delete
}else{
//do update
}
});
}
}