@analogjs/astro-angular
Astro ist ein modernes Web-Framework, das für die Erstellung schneller, inhaltsorientierter Websites entwickelt wurde und mit allen wichtigen Frontend-Frameworks kompatibel ist. Obwohl es in erster Linie ein Werkzeug für die statische Website-Generierung (SSG) ist, kann es auch dynamische Komponenten, sogenannte "islands", integrieren, die eine "partial hydration" unterstützen.
Dieses Paket ermöglicht das Rendern von Angular Komponenten als "islands" in Astro.
Einrichtung
Astro CLI verwenden
Verwende den Befehl astro add
, um die Integration zu installieren
Mit npm:
npx astro add @analogjs/astro-angular
Mit pnpm:
pnpm astro add @analogjs/astro-angular
Mit yarn:
yarn astro add @analogjs/astro-angular
Dieser Befehl:
- Installiert das Paket
@analogjs/astro-angular
. - Fügt die Integration von
@analogjs/astro-angular
zur Dateiastro.config.mjs
hinzu. - Installiert die notwendigen Abhängigkeiten zum Rendern von Angular-Komponenten auf dem Server und dem Client sowie allgemeine Angular-Abhängigkeiten, wie
@angular/common
.
Einrichten der TypeScript-Konfiguration
Die Integration benötigt eine tsconfig.app.json
im Stammverzeichnis des Projekts zur Kompilierung.
Erstelle eine tsconfig.app.json
im Stammverzeichnis des Projekts.
{
"extends": "./tsconfig.json",
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"noEmit": false,
"target": "es2020",
"module": "es2020",
"lib": ["es2020", "dom"],
"skipLibCheck": true
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true,
"allowJs": false
},
"files": [],
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
Gehe zu Definieren einer Komponente, um eine Angular-Komponente hinzufügen zur Verwendung in einer Astro-Komponente einzurichten.
Manuelle Installation
Die Integration kann auch manuell installiert werden
Installation der Astro-Integration
yarn add @analogjs/astro-angular
Installation der notwendigen Angular-Abhängigkeiten
yarn add @angular-devkit/build-angular @angular/{animations,common,compiler-cli,compiler,core,language-service,forms,platform-browser,platform-browser-dynamic,platform-server} rxjs zone.js tslib
Hinzufügen der Integration
Füge die Integration in die Datei astro.config.mjs
ein.
import { defineConfig } from 'astro/config';
import angular from '@analogjs/astro-angular';
export default defineConfig({
integrations: [angular()],
});
Weiter zu Definieren einer Komponente
Konfiguration
Vite Angular Plugin konfigurieren
Geben Sie ein Optionsobjekt an, um das @analogjs/vite-plugin-angular
zu konfigurieren, das dieses Plugin antreibt.
import { defineConfig } from 'astro/config';
import angular from '@analogjs/astro-angular';
export default defineConfig({
integrations: [
angular({
vite: {
inlineStylesExtension: 'scss|sass|less',
},
}),
],
});
Pakete für SSR-Kompatibilität umwandeln
Um sicherzustellen, dass Angular-Bibliotheken während des SSR-Prozesses von Astro umgewandelt werden, füge diese dem Array ssr.noExternal
in der Vite-Konfiguration hinzu.
import { defineConfig } from 'astro/config';
import angular from '@analogjs/astro-angular';
export default defineConfig({
integrations: [angular()],
vite: {
ssr: {
// transform these packages during SSR. Globs supported
noExternal: ['@rx-angular/**'],
},
},
});
Definieren einer Komponente
Die Astro-Angular-Integration unterstützt nur das Rendern von standalone Komponenten:
import { NgIf } from '@angular/common';
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-hello',
standalone: true,
imports: [NgIf],
template: `
<p>Hello from Angular!!</p>
<p *ngIf="show">{{ helpText }}</p>
<button (click)="toggle()">Toggle</button>
`,
})
export class HelloComponent {
@Input() helpText = 'help';
show = false;
toggle() {
this.show = !this.show;
}
}
Füge die Angular-Komponente zur Vorlage der Astro-Komponente hinzu. Dadurch wird nur der HTML-Code der Angular-Komponente gerendert.
---
import { HelloComponent } from '../components/hello.component';
const helpText = "Helping binding";
---
<HelloComponent />
<HelloComponent helpText="Helping" />
<HelloComponent helpText={helpText} />
Um die Komponente auf dem Client zu hydrieren, verwende eine der Astro-Client-Direktiven:
---
import { HelloComponent } from '../components/hello.component';
---
<HelloComponent client:visible />
Weitere Informationen über Client Directives findest du in der Astro-Dokumentation.