gpt4 book ai didi

javascript - 在 @Component 中使用导入的模块

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

我正在尝试根据我在 @Component 之前导入的模块属性设置 templateUrl,即 -

import { details } from './details';

@Component({
selector: 'app-my-cmp',
templateUrl: details.typeA ? './pageA.html' : './pageB.html'
})

当我这样做时,我收到一个错误 - Module not found,但是当我在 ngOnInit() 中使用导入的模块时,我可以访问这个模块。

如何在 templateUrl 行中使用导入的模块?

最佳答案

只是另一种解决方案。

您可以使用 ng-template 实现此目的,然后根据您的情况动态更新模板,如下所示 -

import {
Compiler, Component, Injector, VERSION, ViewChild, NgModule, NgModuleRef,
ViewContainerRef
} from '@angular/core';

@Component({
selector: 'my-app',
template: `<ng-container #vc></ng-container>`,
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
@ViewChild('vc', {read: ViewContainerRef}) vc;
conditionValue = 'myCondition';

constructor(
private _compiler: Compiler,
private _injector: Injector,
private _m: NgModuleRef<any>
) {

}
ngOnInit() {
let tmpCmp;
if (this.conditionValue === 'myCondition') {
tmpCmp = Component({
templateUrl: './e.html'})(class {
});
} else {
// something else
}

const tmpModule = NgModule({declarations: [tmpCmp]})(class { });

this._compiler.compileModuleAndAllComponentsAsync(tmpModule)
.then((factories) => {
const f = factories.componentFactories[0];
const cmpRef = f.create(this._injector, [], null, this._m);
cmpRef.instance.name = 'dynamic';
this.vc.insert(cmpRef.hostView);
})
}
}

#Example

更多信息,请引用-

关于javascript - 在 @Component 中使用导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411297/

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