
Angular 14의 흥미로운 기능 중 하나는 Angular의 독립형 구성 요소가 마침내 출시되었다는 것입니다.
Angular 14에서는 개발자가 독립 구성 요소를 사용하여 다양한 구성 요소를 개발하려고 시도할 수 있지만 Angular 독립 구성 요소의 API는 아직 안정적이지 않으며 향후 일부 파괴적인 업데이트가 있을 수 있으므로 권장되지 않습니다. 프로덕션 환경에서 사용하세요. [관련 튜토리얼 추천: "angular 튜토리얼"]
기존 컴포넌트의 경우 @Component() 에 Standalone: true 를 추가한 다음 @NgModule() 없이 직접 imports 사용할 수 있습니다. . 새 구성 요소를 생성하는 경우 ng generate component <name> --standalone 명령을 사용하여 독립 구성 요소를 직접 생성할 수 있습니다. 예:
ng generate 구성 요소 버튼-목록 --standalone
@Component({
선택기: '앱 버튼 목록',
독립형: 사실,
수입: [
공통모듈,
],
templateUrl: './button-list.comComponent.html',
styleUrls: ['./button-list.comComponent.scss']
})
내보내기 클래스 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-button 비활성화>비활성화</button> <a mat-button href="https://damingerdai.github.io" target="_blank">링크</a>
렌더링:

AppComponent 독립 구성 요소로 설정하는 것입니다.
@Component({
선택기: 'app-root',
templateUrl: './app.comComponent.html',
styleUrls: ['./app.comComponent.scss'],
독립형: 사실,
})
import class AppComponent { 두 번째 단계는 AppModule 의 가져오기에 가져온 모듈을 AppComponent 의 가져오기에 추가하는 것입니다. 그러나 두 가지 모듈 예외( BrowserModule 및 BrowserAnimationsModule 가 있습니다.
가져오면 문제가 발생할 수 있습니다. ** BrowserModule 이미 로드되어 있습니다. NgIf 및 NgFor와 같은 일반 지시문에 액세스해야 하는 경우 대신 CommonModule 을 가져오십시오.**:

세 번째 단계는 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 라는 세 가지 독립 구성 요소가 있고
main.ts 에서 ROUTES 개체 const ROUTES를 만듭니다
. Route[] = [
{
길: '',
pathMatch: '전체',
리디렉션 대상: '집'
},
{
경로: '집',
구성요소:홈구성요소
},
{
경로: '버튼',
로드컴포넌트: () =>
import('./app/button-list/button-list.comComponent').then(
(mod) => mod.ButtonListComponent
),
},
{
경로: '칩',
로드컴포넌트: () =>
import('./app/chip-list/chip-list.comComponent').then(
(mod) => mod.ChipListComponent
),
},
]; 그 중 ButtonListComponent 와 ChipListComponent loadComponent 사용하여 경로의 지연 로딩을 구현합니다.
그런 다음 providers 사용하여 bootstrapApplication 의 두 번째 매개 변수에 RouterModule 등록합니다.
bootstrapApplication(AppComponent, {
제공업체: [
importProvidersFrom(RouterModule.forRoot([...ROUTES])),
],
}).catch(err => console.error(err)); 렌더링:

Angular 애플리케이션을 시작하려면 일부 값이나 서비스를 주입해야 할 수도 있습니다. bootstrapApplication 에서는 providers 통해 값이나 서비스를 등록할 수 있습니다.
예를 들어, PhotoService 에 삽입해야 하는 사진을 가져오는 URL이 있습니다.
bootstrapApplication(AppComponent, {
제공업체: [
{
제공: 'photoUrl',
useValue: 'https://picsum.photos',
},
{제공: PhotosService, useClass: PhotosService },
importProvidersFrom(RouterModule.forRoot([...ROUTES])),
importProvidersFrom(HttpClientModule)
],
}) PhotoService 코드는 다음과 같습니다:
@Injectable()export class PhotosService {
건설자(
@Inject('photoUrl') 비공개 photoUrl: 문자열,
비공개 http: HttpClient ) { }
공개 getPhotoUrl(i: 번호): 문자열 {
`${this.photoUrl}/200/300?random=${i}`를 반환합니다.
}
} 이 글에 사용된 소스 코드: https://github.com/damingerdai/angular-standalone-comComponents-app
온라인 데모: https://damingerdai.github.io/angular-standalone-comComponents-app/Original
text 주소: https://juejin.cn/post/7107224235914821662