Angular的啟動過程
在上一篇的部落格中,我們詳細瞭解了新專案的專案結構。知道了main.ts
是整個Angular
專案的入口點,那麼,Angular
專案的啟動過程是怎樣的呢?
那麼我們就要搞清楚三個問題。
1.啟動時載入了哪個頁面。
2.啟動時執行了哪些指令碼
3.這些指令碼都做了什麼
首先我們看一下angular-cli.json
這個檔案,上一篇部落格說到這個檔案是命令列工具的配置檔案。我們先來看看裡面的程式碼
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "test"//專案名稱
},
"apps": [
{
"root": "src",/*指向的是angular應用啟動時從哪個目錄找資源,預設指向src目錄*/
"outDir": "dist",
"assets": [/*資源目錄*/
"assets",
"favicon.ico"
],
"index": "index.html",/* index指向Angular應用啟動時載入的頁面 預設指向src目錄中index.html*/
"main": "main.ts",/* main屬性指向Angular應用啟動時載入的指令碼 預設指向src目錄中的main.ts*/
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"styles.css"
],
"scripts": [
"../node_modules/jquery/dist/jquery.js"
],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"lint": [
{
"project": "src/tsconfig.app.json"
},
{
"project": "src/tsconfig.spec.json"
},
{
"project": "e2e/tsconfig.e2e.json"
}
],
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"component": {}
}
}
上面的程式碼我們主要看apps
中的root
、index
和main
屬性:
root
屬性指向的是angular
應用啟動時從哪個目錄找資源,預設指向src
目錄
index
指向Angular
應用啟動時載入的頁面 預設指向src
目錄中index.html
main
屬性指向Angular
應用啟動時載入的指令碼 預設指向src
目錄中的main.ts
這個時候我們就知道了
程式啟動時載入的是index.html
這個頁面,執行了main.ts
這個指令碼。
下面我們來看看指令碼做了什麼。
main.ts
中的程式碼
/*開發者模式的配置*/
import { enableProdMode } from '@angular/core';
/*告訴Angular使用哪個模組啟動應用*/
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
/*匯入主模組*/
import { AppModule } from './app/app.module';
/*倒入環境配置*/
import { environment } from './environments/environment';
/*如果是生產環境 關閉開發者模式*/
if (environment.production) {
enableProdMode();
}
/*程式的起點,整個程式就是從這裡執行的,AppModule指向的是/app/app.module,也就是說程式啟動時會去載入/app/app.module這個檔案*/
platformBrowserDynamic().bootstrapModule(AppModule);
main.ts
告訴Angular主模組是AppModule
,Angular也就知道了去載入AppModule
。
index.html
中的程式碼很簡單,在上一篇部落格中也說過<app-root></app-root>
這個標籤就是元件展示的地方。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root>Loading...</app-root>
</body>
</html>
好了,到現在為止我們就知道上面的三個問題的答案了
下面就是Angular
應用的啟動過程
1.Angular應用在啟動時首先會去angular-cli.json
這個配置檔案中去尋找要載入的頁面和指令碼。
預設是載入index.html
和main.ts
2.然後去main.ts
中找到宣告指定的主模組,預設的主模組是app.module
3.然後去app.module
中找到指定的主元件,預設的主元件是app.component
4.然後再去app.component
中找到指定的選擇器,模板和樣式等等
5.最後,將元件渲染到index.html
中的選擇器中
在將元件渲染到選擇器之前,會先顯示選擇器本身的內容,直到將選擇器中的內容替換為主元件中模本的內容。
這也就是為什麼我們開啟頁面的時候會先出現loading
的字樣。
以上就是整個專案的啟動過程!
相關文章
- main的啟動過程AI
- app的啟動過程(三)APP
- Service啟動過程
- SpringBoot啟動過程Spring Boot
- Windows 啟動過程Windows
- App 啟動過程(含 Activity 啟動過程) | 安卓 offer 收割基APP安卓
- 根Activity元件的啟動過程元件
- Spring啟動過程(一)Spring
- Linux 啟動過程分析Linux
- Android App啟動過程AndroidAPP
- SpringBoot 系列-啟動過程Spring Boot
- jmeter 啟動過程剖析JMeter
- iOS App啟動過程iOSAPP
- Liferay 啟動過程分析
- Spring Boot 啟動過程Spring Boot
- 走近原始碼:Redis的啟動過程原始碼Redis
- 作業系統啟動的過程作業系統
- Cypress 本身啟動過程的除錯除錯
- Linux的啟動過程及init程式Linux
- 關於 Angular 應用的 Bootstrap 過程Angularboot
- DUBBO服務啟動過程
- Linux系統啟動過程Linux
- Linux核心Kernel啟動過程Linux
- HDFS啟動過程+安全模式模式
- 計算機啟動過程計算機
- Spring Security 啟動過程分析Spring
- Eureka Server啟動過程分析Server
- 7.neutron-server啟動——neutron api啟動過程ServerAPI
- Activity的啟動過程第二篇
- 一張圖弄清Activity的啟動過程
- 深入理解 iOS App 的啟動過程iOSAPP
- springboot啟動過程中常用的回撥Spring Boot
- Spring啟動過程——原始碼分析Spring原始碼
- redis啟動初始化過程Redis
- 【原始碼】Redis Server啟動過程原始碼RedisServer
- Android效能優化之啟動過程(冷啟動和熱啟動)Android優化
- 精盡Spring Boot原始碼分析 - SpringApplication 啟動類的啟動過程Spring Boot原始碼APP
- 筆記-iOS應用程式的啟動過程筆記iOS