2017-07-14 20 views
0

这种情况是,我想要一个组合框(选择)在NavMenuComponent与博客。它关于快速导航体验。Angular 2 - 克隆BlogComponent:blogs []到Navmenu combobox的最佳方法?

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

我现在的问题是,当我添加/删除任何博客组合框没有得到更新。而那是因为IM与BlogComponent>blogs[]工作,而不是NavMenuComponent>blogs[]

我一定要好好刷新得到它的工作!任何更好的方法?我可以强制更新从另一个组件的数组? [没有共享服务]

我可以把它们放到共享服务中,但我不喜欢这个想法。因为然后在BlogComponent我将不得不使用sharedService.getBlogs()而不是blogService.getBlogs()

有什么想法?

+0

个人而言,我更喜欢'sharedBlogService'但无论...在组件创建/ DELETES'blog',加上'Observable's,每当发生变更发出事件,那么在'NavMenuComponent '听那个事件。 –

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

}