Angular 2-克隆BlogComponent的最佳方法:blogs[]到Navmenu组合框?

Angular 2-克隆BlogComponent的最佳方法:blogs[]到Navmenu组合框?,angular,Angular,这种情况是,我想在NavMenuComponent和博客中选择一个组合框。这是关于快速导航体验 目前我有第二个数组博客:IBlogs[],这是一个糟糕的做法,但无论如何 我现在的问题是,当我添加/删除任何博客时,组合框都没有得到更新。这是因为我使用的是BlogComponent>blogs[],而不是NavMenuComponent>blogs[] 我必须努力使它工作!还有更好的办法吗?我可以强制从另一个组件更新阵列吗?[没有共享服务] 我可以让他们共享服务,但我不喜欢这个想法。因为在BlogC

这种情况是,我想在NavMenuComponent和博客中选择一个组合框。这是关于快速导航体验

目前我有第二个数组博客:IBlogs[],这是一个糟糕的做法,但无论如何

我现在的问题是,当我添加/删除任何博客时,组合框都没有得到更新。这是因为我使用的是BlogComponent>blogs[],而不是NavMenuComponent>blogs[]

我必须努力使它工作!还有更好的办法吗?我可以强制从另一个组件更新阵列吗?[没有共享服务]

我可以让他们共享服务,但我不喜欢这个想法。因为在BlogComponent中,我必须使用sharedService.getBlogs而不是blogService.getBlogs

有什么想法吗?

例如:

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

}

就我个人而言,我更喜欢sharedBlogService,但不管怎样。。。在创建/删除博客的组件中,添加可观察对象并在发生更改时发出事件,然后在NavMenuComponent中侦听该事件。有链接吗?我是新来的