首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过DynamicComponentLoader向@Component提供数据?

如何通过DynamicComponentLoader向@Component提供数据?
EN

Stack Overflow用户
提问于 2015-10-22 05:07:26
回答 1查看 495关注 0票数 1

我需要通过DynamicComponentLoader向组件提供视图数据,如果可能的话,可以通过构造函数提供,但为此我需要绑定数据。

代码语言:javascript
代码运行次数:0
运行
复制
var bindings = Injector.resolve([bind(Model).toValue(viewModel)]);
this.loader.loadIntoLocation(component, eleRef, anchor, bindings)

这是可行的,但我需要将数据绑定到注入系统中,因此我不确定这是否是正确的方式。

设置数据的另一种方法是使用promise:

代码语言:javascript
代码运行次数:0
运行
复制
this.loader.loadIntoLocation(component, eleRef, anchor).then(componentRef=> {
  var comp:AbstractComponentBase = componentRef.instance;
  comp.model = viewModel;
});

这也是可行的,但模型在初始化期间是null (或伪值),这可能是@ViewChildrenafterViewInit()的问题。

是否有其他方法可以向使用DynamicComponentLoader创建的组件提供数据

EN

回答 1

Stack Overflow用户

发布于 2016-04-14 04:48:56

我正在试验一个页面容器组件,该组件需要响应路由更改以支持类似于多文档接口的功能。我的所有路由都映射到这个公共容器组件,页面的标识是用RouteData定义的。我还有一个通用的页面组件(以支持我正在转换的应用程序中基于jquery的遗留页面),它将被动态创建,并将RouteData注入到它的构造函数中。

当我意识到在第一个页面加载之后,后续的路由更改不会导致相应的RouteData在公共页面组件的新实例中可用时,我遇到了类似的需求。在每次路由更改时,新页面实例将看到对应于第一个页面的路由数据值,而不是当前页面。

为了解决这个问题,我显式地更改了动态创建的页面可用的RouteData提供程序,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var providers = Injector.resolve([new Provider(RouteData, { useValue: next.routeData })]);
this.loader.loadIntoLocation(LegacyPanelComponent, this.element, 'panels', providers)
    .then(componentRef => this.setActiveRoute(nextRoute, componentRef));

我认为您可以使用类似的方法将数据传递给动态组件,并提供自定义类实例作为提供程序。

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

https://stackoverflow.com/questions/33269281

复制
相关文章

相似问题

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