首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Blogs[]2-克隆BlogComponent的最好方法: Angular to Navmenu combobox?

Blogs[]2-克隆BlogComponent的最好方法: Angular to Navmenu combobox?
EN

Stack Overflow用户
提问于 2017-07-15 00:32:45
回答 1查看 19关注 0票数 0

这种情况下,我希望在NavMenuComponent中有一个带有博客的组合框(select)。这是关于快速导航体验。

目前我有第二个数组blogs: IBlogs[],这是不好的做法,但不管怎样。

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

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

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-15 00:48:54

举个例子:

代码语言:javascript
运行
复制
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
            }
        });
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45107794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档