【发布时间】:2016-10-05 08:38:20
【问题描述】:
我试图创建一个这样的组件动态:
这是我的文件 dynamicComponent.ts:
import {Directive, Input, ViewContainerRef, Component, ReflectiveInjector, ComponentFactory, ComponentFactoryResolver} from '@angular/core';
export function createComponentFactory(resolver: ComponentFactoryResolver, metadata: Component): Promise<ComponentFactory<any>> {
const cmpClass = class DynamicComponent {
};
const decoratedCmp = Component(metadata)(cmpClass);
return new Promise((resolve) => {
resolve(resolver.resolveComponentFactory(decoratedCmp));
});
}
@Directive({
selector: 'dynamic-html-outlet'
})
export class DynamicComponent {
@Input() src: string;
constructor(public vcRef: ViewContainerRef, public resolver: ComponentFactoryResolver) {
}
ngOnChanges() {
if (!this.src) return;
const metadata = new Component({
selector: 'dynamic-component',
template: this.src
});
createComponentFactory(this.resolver, metadata)
.then(factory => {
const injector = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector);
this.vcRef.createComponent(factory, 0, injector, []).changeDetectorRef.detectChanges();
});
}
}
这里是 app.module.ts :
@NgModule({
declarations: [
MyApp,
DynamicComponent,
...APP_PAGES,
...APP_DIRECTIVES
],
imports: [
IonicModule.forRoot(MyApp),
NgReduxModule,
MomentModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: Http) => new TranslateStaticLoader(http, '../assets/i18n', '.json'),
deps: [Http]
})
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
//DynamicComponent,
//ScrollableHeader,
AppLink,
...APP_PAGES,
...APP_DIRECTIVES
],
providers: [
...APP_SERVICES
]
})
必须加载的组件 AppLink 是这样定义的:
@Component({
selector: 'app-link',
template: '<a (click)="openLink($event);"><ng-content></ng-content></a>',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppLink {
@Input() link;
//some method here
}
我总是遇到这个错误:
polyfills.js:3 未处理的承诺拒绝:模板解析错误: 无法绑定到“链接”,因为它不是“应用链接”的已知属性。
感谢您的帮助?
【问题讨论】:
-
请提供app.module的代码