<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # 總結 君子博學而日參省乎己,則知明而行無過矣。 ## 文件命名 組件C層以 `component.ts`結尾,組件V層是標準的html文件,組件樣式是標準的CSS文件,單元測試文件以`spec.ts`結尾,模塊文件以`module.ts`結尾。 ## 模塊與組件 我在本章中共接觸了一個模塊文件`app.module.ts`,該模塊由`AppComponent`,`AddComponent`以及`EditComponent`組成: ```typescript declarations: [ AppComponent, AddComponent, EditComponent ], ``` 從而我們得出如下結論:**組件是模塊的一部分** ![image-20210228172606027](https://img.kancloud.cn/14/de/14de94b8e79938eafff7deacb1db77f0_1448x502.png) 模塊之所以稱為模塊,是由于在其上使用了`NgModule`注解: ```typescript @NgModule({ }) export class AppModule { } ``` 除此以外,我們還可以在karma負責的單元測試文件中,使用`TestBed`來創建動態臨時的模塊: ```typescript beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ HttpClientModule, RouterTestingModule ], declarations: [ AppComponent ], }).compileComponents(); }); ``` 而無論使用哪種方式創建的模塊,其均由:`declarations`,`imports`,`providers`組成。如果該模塊為系統啟動的入口模塊,則還需要為其配置`bootstrap`以指定啟動組件。 ![image-20210228173021966](https://img.kancloud.cn/c6/77/c6778e95733b9e82f3a492baa4baeb92_1410x542.png) 一個組件有三部分組成,負責邏輯處理的C層,負責展示基礎結構的V層,以及負責個性化美顏的CSS文件。 ![image-20210228171723233](https://img.kancloud.cn/a3/a9/a3a99019752d7c52ae1baae975f36054_876x438.png) ## 依賴注入 Angular是個大管家,對模塊的能力進行管理。在組件的構造函數或是V層中發現了什么,就嘗試注入什么。如果沒有注入的能力,則會報NoProvider的異常。 我們可以在子組件`EditComponent`中注入一個父組件`AppComponent`表明一個模塊擁有的能力取決于其`declarations`的內容;我們還可以注入`HttpClientModule`中擁有的`HttpClient`,表明一個模塊的能力還取決于其親友團`imports` ;在 edit組件的單元測試中,我們又通過`providers`的方式提供了`AppComponent`,表明一個模塊的能力還取決于其另一個親友團`providers`。 ![image-20210228173649880](https://img.kancloud.cn/03/03/03032b8d25dc3ab8bf395f7c3c1dc124_2126x656.png) ## 鏈接調用 我們廣泛的接觸了`a.b.c.d`或`a().b().c().d()`的調用形式,這是由于每調用一次我們都會得到另外一下對象。就是我們前面給出的`httpClient.get().subscribe()`一樣。這樣做的好處是可以省略很多中間冗余變量,代碼也變得更加的簡潔。 ![image-20210228174304963](https://img.kancloud.cn/7b/35/7b351526c7e2d304eaf7c68b1caca445_1522x552.png) ## 回調函數 沒有回調函數前,我們只能改變某個被調函數的數據;有了回調函數后,我們可以改變回調函數的算法。回調常常與異步結合使用,我們將其使用到了調用api資源上。 ![image-20210228174519225](https://img.kancloud.cn/84/59/8459e6b3055ff16fc1872f8f219d9c1c_516x284.png) ## CV交互 C層中被聲明`public`的屬性、方法,V層均可直接使用。如果某個方法是被V層使用的,我們會習慣性的以 `on` 打頭。 V層可以使用插值與模板表達式與C層交互,還可以使用事件及屬性。 ## HTTP請求 我們接觸了4種請求方法: - 用于查詢數據的GET方法 - 用于新建數據的POST方法 - 用于更新數據的PUT方法 - 用于刪除數據的DELETE方法 其實還有一個用于請求是否允許跨域的OPTIONS請求方法,你可以使用`ng s`啟動系統并嘗試添加、修改、刪除教師時,在Firefox的控制臺中找到它的身影。 ![image-20210301102518985](https://img.kancloud.cn/a1/ac/a1ac1f82ebab456d21ddf62c64c19a69_1656x328.png) ## 測試與開發 測試與開發是兩個完全獨立的世界,互相看不到。所以小組件們才會膽大包天地在開發中說自己屬于`AppModule`,在測試中卻說自己屬于`DynamicTestModule`。 好了,就到這里。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看