【发布时间】:2016-08-15 07:30:28
【问题描述】:
我在 Angular 1.x 应用程序中构建了许多指令。这些指令被我公司的各种内部应用程序使用。我希望这些应用程序不必更改它们的代码,而是在我升级到 Angular 2.x 时在我的指令中抽象出许多这些语法更改。 例如,假设我有以下指令:
<my-directive
my-first-attribute="vm.someProperty"
my-second-attribute="vm.someFunction()"
></my-directive>
假设我无法从父组件的角度更改该语法 这些属性需要转换为:
[myFirstAttribute]="vm.someProperty"
(click)="vm.someFunction()"
曾经有一个编译功能,我可以在链接之前进行许多这些模板更改。现在我有了我的构造函数,我可以在其中拉入ElementRef 和DynamicComponentLoader
但是,如何将vm 提供给动态加载的组件?
我试过了:
this._loader.loadIntoLocation(SubCmp, this._el, 'container')
.then((compRef:ComponentRef) => {
compRef.instance.vm = this.vm;
});
但是利用DynamicComponentLoader 的组件本身并不知道vm。我真的不想更改调用组件的 HTML 语法,而组件又会动态加载它自己的子组件。这是我目前的plunkr,它使用的是Angular 2 beta 15。
【问题讨论】:
标签: javascript angularjs angular angular2-template