
Salah satu fitur menarik dari Angular 14 adalah komponen mandiri Angular akhirnya hadir.
Di Angular 14, pengembang dapat mencoba menggunakan komponen independen untuk mengembangkan berbagai komponen, namun perlu dicatat bahwa API komponen independen Angular masih belum stabil, dan mungkin ada beberapa pembaruan yang merusak di masa mendatang, sehingga tidak disarankan untuk digunakan dalam lingkungan produksi. [Rekomendasi tutorial terkait: "tutorial sudut"]
Untuk komponen yang sudah ada, kita dapat menambahkan standalone: true ke @Component() , lalu kita dapat menggunakan imports secara langsung tanpa @NgModule() Impor modul lain . Jika Anda membuat komponen baru, Anda dapat menggunakan perintah ng generate component <name> --standalone untuk langsung membuat komponen independen, misalnya:
ng generate komponen button-list --standalone
@Component({
pemilih: 'daftar-tombol-aplikasi',
mandiri: benar,
impor: [
Modul Umum,
],
templateUrl: './button-list.component.html',
styleUrls: ['./button-list.component.scss']
})
kelas ekspor ButtonListComponent mengimplementasikan OnInit Kita dapat menambahkan modul yang ada di imports , dengan mengambil MatButtonModule sebagai contoh:
imports: [
Modul Umum,
Modul MatButton,
], sehingga kita dapat menggunakan komponen mat-button dari MatButtonModule di ButtonListComponent :
<button mat-button>Basic</button> <button mat-button color="primary">Utama</button> <button mat-button color="accent">Aksen</button> <button mat-button color="warn">Peringatkan</button> <button mat-button dinonaktifkan>Dinonaktifkan</button> <a mat-button href="https://damingerdai.github.io" target="_blank">Tautan</a>
Rendering:

adalah menyetel AppComponent sebagai komponen independen:
@Component({
pemilih: 'root-aplikasi',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
mandiri: benar,
})
ekspor kelas AppComponent { Langkah kedua adalah menambahkan modul yang diimpor dalam impor AppModule ke impor AppComponent , tetapi ada dua pengecualian modul: BrowserModule dan BrowserAnimationsModule .
Jika diimpor, hal ini dapat menimbulkan masalah: ** BrowserModule telah dimuat. Jika Anda memerlukan akses ke arahan umum seperti NgIf dan NgFor, impor CommonModule saja.**:

Langkah ketiga adalah menghapus file app.module.ts .
Langkah terakhir adalah melakukan import di main.ts :
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err)); diubah menjadi:
bootstrapApplication(AppComponent).catch(err => console.error(err));
Dengan cara ini, kita dapat menggunakan komponen independen untuk memulai komponen Angular.
Saya memiliki tiga komponen independen di sini: HomeComponent , ButtonListComponent dan ChipListComponent ,
lalu buat objek ROUTES const ROUTES di main.ts
: Route[] = [
{
jalur: '',
pathMatch: 'penuh',
redirectTo: 'rumah'
},
{
jalur: 'rumah',
komponen: Komponen Rumah
},
{
jalur: 'tombol',
komponen beban: () =>
import('./app/button-list/button-list.component').then(
(mod) => mod.ButtonListComponent
),
},
{
jalur: 'chip',
komponen beban: () =>
import('./app/chip-list/chip-list.component').then(
(mod) => mod.ChipListComponent
),
},
]; Diantaranya, ButtonListComponent dan ChipListComponent menggunakan loadComponent untuk mengimplementasikan pemuatan rute yang lambat.
Kemudian gunakan providers untuk mendaftarkan RouterModule di parameter kedua bootstrapApplication .
bootstrapApplication(Komponen Aplikasi, {
penyedia: [
importProvidersFrom(RouterModule.forRoot([...RUTE])),
],
}).catch(err => console.error(err)) ;

Saat kita ingin memulai aplikasi Angular, kita mungkin perlu memasukkan beberapa nilai atau layanan. Di bootstrapApplication , kita dapat mendaftarkan nilai atau layanan melalui providers .
Misalnya, saya memiliki url untuk mendapatkan gambar, yang perlu dimasukkan ke dalam PhotoService :
bootstrapApplication(AppComponent, {
penyedia: [
{
berikan: 'photoUrl',
useValue: 'https://picsum.photos',
},
{provide: PhotosService, useClass: PhotosService },
importProvidersFrom(RouterModule.forRoot([...RUTE])),
importProvidersFrom(HttpClientModule)
],
}) Kode PhotoService adalah sebagai berikut:
@Injectable()export class PhotosService {
konstruktor(
@Inject('photoUrl') photoUrl pribadi: string,
http pribadi: HttpClient ) {}
getPhotoUrl publik(i: angka): string {
kembalikan `${ini.photoUrl}/200/300?random=${i}`;
}
} Kode yang digunakan dalam artikel ini: https://github.com/damingerdai/angular-standalone-components-app
Demo online: https://damingerdai.github.io/angular-standalone-components-app/Original
text Alamat: https://juejin.cn/post/7107224235914821662