我需要通过DynamicComponentLoader
通过var bindings = Injector.resolve([bind(Model).toValue(viewModel)]);
this.loader.loadIntoLocation(component, eleRef, anchor, bindings)
向组件提供视图数据,但是为此我需要绑定数据。
this.loader.loadIntoLocation(component, eleRef, anchor).then(componentRef=> {
var comp:AbstractComponentBase = componentRef.instance;
comp.model = viewModel;
});
这可行,但我需要将数据绑定到注入系统,因此我不确定这是否是正确的方法。
设置数据的另一种方法是使用promise:
null
这也可以,但在初始化期间模型为@ViewChildren
(或伪值),这可能是afterViewInit()
和DynamicComponentLoader
的问题。
是否有另一种方法可以为使用{{1}}创建的组件提供数据?
答案 0 :(得分:1)
我正在尝试一个页面容器组件,它需要响应路由更改以支持多文档界面之类的功能。我的所有路由都映射到此公共容器组件,并且使用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));
我认为您可以使用类似的方法将数据传递到动态组件,并将自定义类实例作为提供程序提供。