我正在使用angular 2的动态组件加载器的确切实现,如下所述:https://angular.io/docs/ts/latest/api/core/DynamicComponentLoader-class.html(特别是loadAsRoot实现)。
工作正常。但是,现在我想通过以下方式扩展它:父级具有一定的宽度x高度,我将其传递给服务。然后,在孩子中,我订阅了服务,并使用ngStyle呈现子维度。
这在整个应用程序中都可以正常工作,除非我使用动态组件加载器!这不是服务的问题,它在组件实例化时正确地激活控制台的宽度和高度。但无论我在ngStyle中放置什么都不会被渲染。
我做错了什么,我有什么方法可以解决这个问题?
谢谢。
修改
示例代码:
@Component({
selector: 'child-component',
template: '<div [ngStyle]="{'background-color':'red'}">Child</div>'
})
class ChildComponent {
}
@Component({
selector: 'my-app',
template: 'Parent (<child id="child"></child>)'
})
class MyApp {
constructor(dcl: DynamicComponentLoader, injector: Injector) {
dcl.loadAsRoot(ChildComponent, '#child', injector);
}
}
bootstrap(MyApp);
调用ngStyle无效。
答案 0 :(得分:1)
import matplotlib.pyplot as plt
import numpy as np
x, y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 100))
im = (x**2 + y**2)/100-0.5 # Creating synthetic data for your example
p = plt.imshow(im.T, vmin=0, vmax=1, origin='lower', interpolation='nearest') # Set limits with vmin and vmax
p.cmap.set_under('k') # Set color under lower limit (k for black)
p.cmap.set_over('w') # Set color over upper limit (w for white)
plt.show()
没有为添加的组件配置更改检测,但dcl.loadAsRoot()
取决于启用的更改检测。
https://github.com/angular/angular/issues/6223#issuecomment-195155190
中解释了一种解决方法ngStyle
使用私有this.appRef._loadComponent(cmpRef);
。
_loadComponent()
即将被弃用,取而代之的是DynamicComponentLoader
。
有关ViewContainerRef.createComponent()
示例,请参阅Angular 2 dynamic tabs with user-click chosen components