我需要通过DynamicComponentLoader
向组件提供视图数据,如果可能的话,可以通过构造函数提供,但为此我需要绑定数据。
var bindings = Injector.resolve([bind(Model).toValue(viewModel)]);
this.loader.loadIntoLocation(component, eleRef, anchor, bindings)
这是可行的,但我需要将数据绑定到注入系统中,因此我不确定这是否是正确的方式。
设置数据的另一种方法是使用promise:
this.loader.loadIntoLocation(component, eleRef, anchor).then(componentRef=> {
var comp:AbstractComponentBase = componentRef.instance;
comp.model = viewModel;
});
这也是可行的,但模型在初始化期间是null
(或伪值),这可能是@ViewChildren
和afterViewInit()
的问题。
是否有其他方法可以向使用DynamicComponentLoader
创建的组件提供数据
发布于 2016-04-13 20:48:56
我正在试验一个页面容器组件,该组件需要响应路由更改以支持类似于多文档接口的功能。我的所有路由都映射到这个公共容器组件,页面的标识是用RouteData定义的。我还有一个通用的页面组件(以支持我正在转换的应用程序中基于jquery的遗留页面),它将被动态创建,并将RouteData注入到它的构造函数中。
当我意识到在第一个页面加载之后,后续的路由更改不会导致相应的RouteData在公共页面组件的新实例中可用时,我遇到了类似的需求。在每次路由更改时,新页面实例将看到对应于第一个页面的路由数据值,而不是当前页面。
为了解决这个问题,我显式地更改了动态创建的页面可用的RouteData提供程序,如下所示:
var providers = Injector.resolve([new Provider(RouteData, { useValue: next.routeData })]);
this.loader.loadIntoLocation(LegacyPanelComponent, this.element, 'panels', providers)
.then(componentRef => this.setActiveRoute(nextRoute, componentRef));
我认为您可以使用类似的方法将数据传递给动态组件,并提供自定义类实例作为提供程序。
https://stackoverflow.com/questions/33269281
复制