use*_*572 6 web typescript angular
我有两个角度应用程序 A 和 B。现在在 B 应用程序的 One 选项卡中我想加载整个应用程序 A。我该如何实现这一目标?
请让我知道如何实现此功能。Angular 是否有任何我可以使用的特殊标签
解决您的问题的一种方法可能是创建您自己要求的标签。我通过如上所述的名为 Web 组件或Angular 元素的技术在 Angular 应用程序 B 中实现了 Angular 应用程序 A ,请参见https://www.techiediaries.com/angular/angular-9-elements-web-components/
在以下步骤中,在应用程序 A 中定义了一个标签shiny-app-a,稍后通过将 A 的 JavaScript 文件导入到 B 并通过标签引用它们来在应用程序 B 中使用该标签。
它在以下环境中工作:
使其运行的步骤是:
该应用程序还需要包@angular/elements。
$ ng new App-A
$ cd App-A
$ ng add @angular/elements
Run Code Online (Sandbox Code Playgroud)
我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
$ ng build --prod --output-hashing none
Run Code Online (Sandbox Code Playgroud)
这会生成以下文件:
您将在文件夹 [...]\App-A\dist\App-A 中找到它们
跑步
$ ng serve
Run Code Online (Sandbox Code Playgroud)
并在浏览器中看到您新建的应用程序 A。
注意:这里不需要@angular/elements。
$ ng new App-B
Run Code Online (Sandbox Code Playgroud)
在此示例中,我使用文件夹 [...]/src/assets。
$ cd App-B/src/assets/
Run Code Online (Sandbox Code Playgroud)
并将 JavaScript 从应用程序 A 复制到此文件夹,即:
要实现的关键项目是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 { }
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
2.3.3 在app.component.html中使用标签
替换文件app.component.html中的任何内容,只需:
<shiny-app-a></shiny-app-a>
Run Code Online (Sandbox Code Playgroud)
跑步
$ ng serve
Run Code Online (Sandbox Code Playgroud)
并在浏览器应用程序 A 中查看应用程序 B。
| 归档时间: |
|
| 查看次数: |
6156 次 |
| 最近记录: |