javascript - Angular 6 网络组件。Angular 应用程序中的 Angular 元素不起作用
问题描述
我在角度应用程序中运行角度元素有问题。我有简单的应用程序和简单的组件。应用模块:
import {BrowserModule} from '@angular/platform-browser';
import {ChangeDetectorRef, CUSTOM_ELEMENTS_SCHEMA, Injector, NgModule} from '@angular/core';
import {AppComponent} from './app.component';
import {TestComponent} from './test/test.component';
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import {FormsModule} from "@angular/forms";
import {ButtonModule, DropdownModule, InputTextModule} from "primeng/primeng";
import {Test2Component} from './test2/test2.component';
import {createCustomElement} from "@angular/elements";
@NgModule({
declarations: [
AppComponent,
TestComponent,
Test2Component
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
DropdownModule,
InputTextModule,
ButtonModule,
],
providers: [],
entryComponents: [TestComponent],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule {
constructor(private injector: Injector) {
const TestElement = createCustomElement(TestComponent, {injector});
customElements.define('appd-test', TestElement);
}
ngDoBootstrap() {
}
}
test.component.ts:
import {Component, ViewEncapsulation} from '@angular/core';
import {SelectItem} from "primeng/api";
@Component({
selector: 'appd-test',
templateUrl: './test.component.html',
encapsulation: ViewEncapsulation.Emulated
})
export class TestComponent {
_message;
_message2;
cars: SelectItem[] = [
{label: 'Audi', value: 'Audi'},
{label: 'BMW', value: 'BMW'},
{label: 'Fiat', value: 'Fiat'},
{label: 'Ford', value: 'Ford'},
{label: 'Honda', value: 'Honda'},
{label: 'Jaguar', value: 'Jaguar'},
{label: 'Mercedes', value: 'Mercedes'},
{label: 'Renault', value: 'Renault'},
{label: 'VW', value: 'VW'},
{label: 'Volvo', value: 'Volvo'},
];
_selectedCar: string;
set selectedCar(value: string) {
this._selectedCar = value;
}
set message(value) {
this._message = value;
console.log(value);
}
set message2(value) {
this._message2 = value;
console.log(value);
}
}
test.component.html:
<div>
<h1>TEST1</h1>
<div>
<span>Name: </span>
<input type="text" [(ngModel)]="_message" pInputText />
</div>
<div>
<span>Surname: </span>
<input type="text" [(ngModel)]="message2" pInputText />
</div>
<div>
<p-dropdown [options]="cars" [(ngModel)]="selectedCar"></p-dropdown>
</div>
<div>
<span>{{_message}}</span>
<span>{{_message2}}</span>
<span>{{_selectedCar}}</span>
</div>
<h2>......................</h2>
</div>
在 ng build 之后,我有 5 个文件:main.js、polyfills.js、runtime.js、styles.js、vendor.js。
我要导入此 Web 组件的另一个 Angular 应用程序。
<!doctype html>
<html lang="en">
<head>
...
</head>
<body>
<app-root></app-root>
<appd-test></appd-test> <!-- HERE WORKS, inside app-root NOT WORKING -->
<script type="text/javascript" src="assets/scripts/appd/runtime.js"></script>
<script type="text/javascript" src="assets/scripts/appd/polyfills.js"></script>
<script type="text/javascript" src="assets/scripts/appd/styles.js"></script>
<script type="text/javascript" src="assets/scripts/appd/vendor.js"></script>
<script type="text/javascript" src="assets/scripts/appd/main.js"></script>
</body>
</html>
当我将此 webcomponent 放入 app.component.html 的新 Angular 应用程序事件不起作用时 - _message 和 _message2 输入没有在屏幕上显示任何内容。当我将测试 webcomponent 直接放入 index.html 时,一切正常。
有人对发生了什么有任何建议吗?
解决方案
推荐阅读
- hybris - 在 SAP Commerce Cloud 中使用 Webchat 集成聊天机器人时出现内部服务器错误
- reactjs - 在 Netlify 和 React(Gatsby) 中使用环境变量
- json - 如何将 json 中的键:值对转换为 mule 中的键 = 值
- javascript - 比较 2 个画布元素的相似性并返回结果
- python - Python处理CSV
- matlab - 如何从矩阵的每一列中选择条目,使它们的总和等于已经指定的数字?
- android - Android Kotlin 中的 Firebase Firestore 查询
- node.js - 部署到 Heroku 失败。移动文件与节点版本不兼容
- sql - 从上一组中选择最大值
- azure-devops - Azure devops 发布管道永远运行并出现错误:该进程无法访问该文件,因为它正被另一个进程使用