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

时间:2017-07-14 16:32:45

标签: angular

案例是我希望NavMenuComponent中有一个带有博客的组合框(选择)。它的快速导航体验。

目前我有第二个阵列blogs: IBlogs[]这是不好的实践,但无论如何。

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

我必须努力刷新才能让它发挥作用!任何更好的方法?我可以从另一个组件强制更新数组吗? [没有共享服务]

我可以将它们放入共享服务但我不喜欢这个想法。因为在BlogComponent中,我必须使用sharedService.getBlogs()代替blogService.getBlogs()

有什么想法吗?

1 个答案:

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

}