我有两个Angular应用程序,分别为A和B。现在在B应用程序的一个标签页中,我想要加载整个应用程序A。我该如何实现?
请告诉我如何实现此功能。Angular是否有任何特殊标记可供使用?
我有两个Angular应用程序,分别为A和B。现在在B应用程序的一个标签页中,我想要加载整个应用程序A。我该如何实现?
请告诉我如何实现此功能。Angular是否有任何特殊标记可供使用?
此应用程序还需要@angular / elements包。
$ ng new App-A
$ cd App-A
$ ng add @angular/elements
我的 app.modules.ts 如下所示:
import { BrowserModule } from '@angular/platform-browser';
// import Injector
import { Injector, NgModule } from '@angular/core';
// import createCustomElement
import { createCustomElement } from '@angular/elements';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
constructor(private injector: Injector){}
ngDoBootstrap(){
const el = createCustomElement(AppComponent, {injector:this.injector});
// Here you define your new tag shiny-app-a
customElements.define('shiny-app-a', el);
}
}
$ ng build --prod --output-hashing none
运行
$ ng serve
在浏览器中查看您新构建的应用程序A。
注意:此处不需要@angular/elements。
$ ng new App-B
在本例中,我使用文件夹[...]/src/assets。
$ cd App-B/src/assets/
实施的关键项目是CUSTOM_ELEMENTS_SCHEMA。 我的应用程序B的 app.modules.ts 如下所示:
import { BrowserModule } from '@angular/platform-browser';
// import CUSTOM_ELEMENTS_SCHEMA
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
// add schemas
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
2.3.2 在 app.component.ts 中从外部源加载 JavaScript
JavaScript 文件也可以从任何源加载。在这种情况下,文件将通过 OnInit() 从 [..]/assets 文件夹中加载。因此,我的应用程序 B 的 app.component.ts 如下所示:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'App-B';
ngOnInit() {
this.loadScript('/assets/runtime.js');
this.loadScript('/assets/main.js');
this.loadScript('/assets/polyfills.js');
}
public loadScript(url: string) {
const body = <HTMLDivElement> document.body;
const script = document.createElement('script');
script.innerHTML = '';
script.src = url;
script.async = false;
script.defer = true;
body.appendChild(script);
}
}
2.3.3 在 app.component.html 中使用标签
将文件 app.component.html 中的任何内容替换为以下内容:
<shiny-app-a></shiny-app-a>
运行
$ ng serve