gpt4 book ai didi

dependency-injection - 如何在 ES6 中使用 angular2 DynamicComponentLoader?

转载 作者:太空狗 更新时间:2023-10-29 17:43:07 26 4
gpt4 key购买 nike

使用 typescript ,而是使用ES6 和angular2 alpha39 来动态加载组件。以下代码类似于我在我的应用程序中的代码。我注意到 angular2 不会创建 DynamicComponentLoaderElementRef 的实例并注入(inject)到构造函数中。它们是未定义的。

如何使用 ES6 和 angular2 alpha39 注入(inject) DynamicComponentLoader?

import {Component, View, Inject, DynamicComponentLoader, ElementRef } from 'angular2/angular2'

@Component({
selector: 'dc',
bindings: [ DynamicComponentLoader ]
})
@View({
template: '<b>Some template</b>'
})

class DynamicComponent {}

@Component({
selector: 'my-app'
})
@View({
template: '<div #container></div>'
})
@Inject(DynamicComponentLoader)
@Inject(ElementRef)
export class App {
constructor(
dynamicComponentLoader,
elementRef
) {
dynamicComponentLoader.loadIntoLocation(DynamicComponent, elementRef, 'container');
}
}

最佳答案

如果要用ES7写代码,我觉得这个时候指定注入(inject)最简洁的做法就是参数使用static getter:

import {Component, View, DynamicComponentLoader, ElementRef } from 'angular2/angular2'

@Component({
selector: 'my-app'
})
@View({
template: '<div #container></b>'
})
export class App {

static get parameters() {
return [[DynamicComponentLoader], [ElementRef]];
}

constructor(dynamicComponentLoader, elementRef) {
dynamicComponentLoader.loadIntoLocation(DynamicComponent, elementRef, 'container');
}
}

参见 this plunker

如果你想在不支持装饰器的 ES6 中编写代码,你还必须为 annotations 属性使用静态 getter。在这种情况下,您必须导入 ComponentMetadataViewMetadata 而不是 ComponentView 例如:

import {ComponentMetadata, ViewMetadata, DynamicComponentLoader, ElementRef } from 'angular2/angular2';

export class App {

static get annotations() {
return [
new ComponentMetadata({
selector: 'app'
}),
new ViewMetadata({
template: '<div #container></b>'
})
];
}

static get parameters() {
return [[DynamicComponentLoader],[ElementRef]];
}

constructor(dynamicComponentLoader, elementRef) {
dynamicComponentLoader.loadIntoLocation(DynamicComponent, elementRef, 'container');
}
}

参见 this plunker

关于dependency-injection - 如何在 ES6 中使用 angular2 DynamicComponentLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com