Angular 14 のエキサイティングな機能の 1 つは、Angular のスタンドアロン コンポーネントがついに登場したことです。
Angular 14 では、開発者は独立したコンポーネントを使用してさまざまなコンポーネントを開発することができますが、Angular の独立したコンポーネントの API はまだ安定しておらず、将来的には破壊的な更新が行われる可能性があるため、推奨されません。本番環境で使用します。 [関連チュートリアルの推奨:「angular チュートリアル」]
既存のコンポーネントの場合は、 standalone: true を@Component()
に追加すると、 @NgModule()
を使用せずにimports
を直接使用できます。他のモジュールをインポートします。 。 新しいコンポーネントを作成している場合は、 ng generate component <name> --standalone
コマンドを使用して、独立したコンポーネントを直接作成できます。たとえば、次のようになり
ます
。
セレクター: 'アプリボタンリスト', スタンドアロン: 確かに、 輸入品: [ 共通モジュール、 ]、 templateUrl: './button-list.component.html', styleUrls: ['./button-list.component.scss'] }) imports クラス ButtonListComponent は OnInit を実装し、
MatButtonModule
例として、既存のモジュールをimports
に追加できます
。 共通モジュール、 マットボタンモジュール、 ] を使用して、
ButtonListComponent
でMatButtonModule
のmat-button
コンポーネントを使用できるようにします:
<button mat-button>Basic</button> <button mat-button color="primary">プライマリ</button> <button mat-button color="accent">アクセント</button> <button mat-button color="warn">警告</button> <button mat-buttondisabled>無効化</button> <a mat-button href="https://damingerdai.github.io" target="_blank">リンク</a>
レンダリング:
、 AppComponent
独立したコンポーネントとして設定することです。
@Component({ セレクター: 'アプリルート', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], スタンドアロン: 確かに、 })2 番目のステップは、
AppModule
AppModule
インポートにインポートされたモジュールをAppComponent
のインポートに追加することですが、 BrowserModule
とBrowserAnimationsModule
2 つのモジュール例外があります。
インポートすると問題が発生する可能性があります: ** BrowserModule
すでにロードされています。NgIf や NgFor などの共通ディレクティブにアクセスする必要がある場合は、代わりにCommonModule
をインポートしてください。**:
3 番目のステップは、 app.module.ts
ファイルを削除することです。
最後のステップは、 main.ts
にインポートすることです。
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err)); は次
のように変更されました:
bootstrapApplication(AppComponent).catch(err => console.error(err));
このようにして、独立したコンポーネントを使用して Angular コンポーネントを起動できます。
ここにはHomeComponent
、 ButtonListComponent
、 ChipListComponent
という 3 つの独立したコンポーネントがあり
、 main.ts
にROUTESオブジェクト const ROUTES を作成します
。 Route[] = [ { パス: ''、 パスマッチ: 'フル'、 リダイレクト先: 'ホーム' }、 { パス: 'ホーム'、 コンポーネント:ホームコンポーネント }、 { パス: 'ボタン', ロードコンポーネント: () => import('./app/button-list/button-list.component').then( (mod) => mod.ButtonListComponent )、 }、 { パス: 'チップ'、 ロードコンポーネント: () => import('./app/chip-list/chip-list.component').then( (mod) => mod.ChipListComponent )、 }、 ];
このうち、 ButtonListComponent
とChipListComponent
loadComponent
使用してルートの遅延ロードを実装します。
次に、 providers
を使用して、 bootstrapApplication
の 2 番目のパラメーターにRouterModule
登録します。
bootstrapApplication(AppComponent, { プロバイダー: [ importProvidersFrom(RouterModule.forRoot([...ROUTES])), ]、}).catch(err
=
> console.error(err));
Angular アプリケーションを開始する場合、いくつかの値またはサービスを注入する必要がある場合があります。 bootstrapApplication
では、 providers
を通じて値やサービスを登録できます。
たとえば、写真を取得するための URL があり、これをPhotoService
に挿入する必要があります。
bootstrapApplication(AppComponent, { プロバイダー: [ { 提供: 'photoUrl'、 useValue: 'https://picsum.photos', }、 {provide: PhotosService、useClass: PhotosService }、 importProvidersFrom(RouterModule.forRoot([...ROUTES])), importProvidersFrom(HttpClientModule) ]、 })
PhotoService
コードは次のとおりです:
@Injectable()export class PhotosService { コンストラクタ( @Inject('photoUrl') プライベート photoUrl: 文字列、 プライベート http: HttpClient ) { } public getPhotoUrl(i: 数値): string { `${this.photoUrl}/200/300?random=${i}` を返します。 } }
この記事で使用したソースコード: https://github.com/damingerdai/angular-standalone-components-app
オンラインデモ: https://damingerdai.github.io/angular-standalone-components-app/
原文住所:https://juejin.cn/post/7107224235914821662