如何将对象注入子控件

时间:2016-05-17 14:04:36

标签: angular

此问题特定于Angular 2。

http://blog.thoughtram.io/angular/2015/08/20/host-and-visibility-in-angular-2-dependency-injection.html

我需要调用我的一个服务,给一些对象发送内容,并通过注入将它们传递给子控件(我不想为此目的使用绑定)。我怎么做? 在下面的代码中(不起作用)我调用blogService来获取CurrentSite对象。我需要将CurrentSite传递给NavBar组件,该组件包含在指令属性中 AppComponent。

@Component({
    selector: 'my-app',
    templateUrl: './app/app.html',
    directives: [NavBar, ROUTER_DIRECTIVES],
    providers: [HTTP_PROVIDERS, ROUTER_PROVIDERS, BlogService, provide(CurrentSite, { useExisting: this.CurrentSite })]
})
    @Routes([
        { path: '/', component: Home },
        { path: '/Contact', component: Contact },
        { path: '/Blog', component: BlogIndex }
])
export class AppComponent implements OnInit {
    public CurrentSite: CurrentSite;

    constructor(private blogService: BlogService) {

    }

    ngOnInit()
    {
        this.SetCurrentSite();
    }

    SetCurrentSite()
    {
        this.blogService.GetActiveSites().subscribe(data => {
            let site = data.find(x => x.SiteName === "SamsBlog");

            if (site === null)
                throw new Error("Site SamsBlog was not found");

            this.CurrentSite = new CurrentSite();
            this.CurrentSite.ID = site.ID;
            this.CurrentSite.SiteName = site.SiteName; 
        });
    }
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个通过DI传递给AppComponent和NavBar的SessionService。

AppComponent检索到CurrentSite后,会在SessionService中存储CurrentSite。然后,NavBar将能够访问CurrentSite,只需查询SessionService。

我希望这会有所帮助