摘要:啟動服務(wù),并打開新窗口可簡寫創(chuàng)建新組件可簡寫創(chuàng)建新服務(wù)創(chuàng)建路由模塊其他另外還有很多的命令提供,詳細(xì)可以查閱官方文檔命令。引入路由模塊導(dǎo)出路由模塊的指令這里需要添加一個數(shù)組,并傳入,導(dǎo)出讓路由器的相關(guān)指令可以在中的組件中使用。
本文目錄
一、項目起步
二、編寫路由組件
三、編寫頁面組件
1.編寫單一組件
2.模擬數(shù)據(jù)
3.編寫主從組件
四、編寫服務(wù)
1.為什么需要服務(wù)
2.編寫服務(wù)
五、引入RxJS
1.關(guān)于RxJS
2.引入RxJS
3.改造數(shù)據(jù)獲取方式
六、改造組件
1.添加歷史記錄組件
2.添加和刪除歷史記錄
七、HTTP改造
1.引入HTTP
2.通過HTTP請求數(shù)據(jù)
3.通過HTTP修改數(shù)據(jù)
4.通過HTTP增加數(shù)據(jù)
5.通過HTTP刪除數(shù)據(jù)
6.通過HTTP查找數(shù)據(jù)
八、結(jié)語
這個入門項目是我學(xué)習(xí)完Angular 英雄指南教程后,自己手寫的一個練習(xí)項目,一步一步來,最終的項目源碼可以這里查看,大佬們請指點啦。
推薦兩個Angular學(xué)習(xí)網(wǎng)站:
Angular 中文網(wǎng)
Angular 修仙之路
還有呢,我沒怎么關(guān)注到樣式,所以樣式會有點丑,主要都放在核心邏輯中了。
最終實現(xiàn):
首頁書本列表數(shù)據(jù)展示
各個頁面靜態(tài)/動態(tài)路由跳轉(zhuǎn)
本地模擬數(shù)據(jù)服務(wù)
書本數(shù)據(jù)的增刪改查
父子組件通信
常用指令使用和介紹
后面我將把這個系列的文章,收錄到我的【CuteJavaScript】中,里面有整理了ES6/7/8/9知識點和重溫JS基礎(chǔ)系列文章。
那么,快跟我一步步來完成這個入門項目吧。
零、Angular安裝Angular 需要 Node.js 的 8.x 或 10.x 版本。
檢查你的Node.js版本,請在終端/控制臺窗口中運行 node -v 命令。
要想安裝 Node.js,請訪問 nodejs.org。
安裝Angular CLI
npm install -g @angular/cli
常用命令
后續(xù)用到會詳細(xì)介紹這些命令。
啟動服務(wù),并打開新窗口
ng serve --open # --open 可簡寫 -o
創(chuàng)建新組件
ng generate component books # generate 可簡寫 g
創(chuàng)建新服務(wù)
ng generate service books
創(chuàng)建路由模塊
ng generate module app-routing --flat --module=app
其他
另外Angular CLI還有很多的命令提供,詳細(xì)可以查閱官方文檔 Angular CLI 命令。
最后搭建完是這樣:
一、項目起步創(chuàng)建項目
ng new books cd books
創(chuàng)建所需的兩個頁面組件
ng g component index ng g component detail
g是generate的簡寫。
二、編寫路由組件這里為了項目結(jié)構(gòu)先起來,所以先簡單配置一下路由,后面路由會調(diào)整,如果遇到什么不懂,可以查看Angular 路由與導(dǎo)航。
安裝路由模塊
ng g module app-routing --flat --module=app
知識點:
--flat 把這個文件放進了 src/app 中,而不是多帶帶的目錄中。
--module=app 告訴 CLI 把它注冊到 AppModule 的 imports 數(shù)組中。
引入路由模塊
// app-routing.module.ts import { RouterModule, Routes } from "@angular/router";
導(dǎo)出路由模塊的指令
這里需要添加一個 @NgModule.exports 數(shù)組,并傳入RouterModule,導(dǎo)出 RouterModule 讓路由器的相關(guān)指令可以在 AppModule 中的組件中使用。
// app-routing.module.ts @NgModule({ imports: [CommonModule], declarations: [], exports: [RouterModule] })
添加定義路由
這里添加路由的時候,記得將所需要指向的組件也引入進來,這里我們需要引入兩個頁面的組件:
// app-routing.module.ts import { IndexComponent } from "./index/index.component"; import { DetailComponent } from "./detail/detail.component";
然后將我們所需要的路由定義在routes變量中,類型是我們引入的Routes:
// app-routing.module.ts const routes: Routes = [ { path: "", redirectTo:"/index", pathMatch:"full" }, // 1 { path: "index", component: IndexComponent}, // 2 { path: "detail/:id", component: DetailComponent}, // 3 ]
知識點:
angular的路由接收兩個參數(shù):
path:用于匹配瀏覽器地址欄中 URL 的字符串。
component:當(dāng)導(dǎo)航到此路由時,路由器展示的組件名稱。
第1行代碼:
作為路由系統(tǒng)的默認(rèn)路由,當(dāng)所有路由都不匹配的話,就會重定向到這個路由,并展示對應(yīng)的組件。
第2行代碼:
正常情況下的路由配置。
第3行代碼:
配置的是攜帶參數(shù)的路由,在路由/后,用 : 拼接參數(shù)名來實現(xiàn),獲取這個參數(shù)的值的方法后面會介紹。
另外,我們還可以這么傳遞參數(shù),直接將數(shù)據(jù)通過路由傳入,后面還會介紹:
{ path: "pathname", component: DemoComponent, data: { title: "pingan8787" } },
添加路由監(jiān)視
配置好路由還不能使用,需要一個監(jiān)視路由變化的工具,這時候需要把RouterModule添加到 @NgModule.imports 數(shù)組中,并用 routes 來配置它。
這里只需要調(diào)用 imports 數(shù)組中的 RouterModule.forRoot() 函數(shù)就行了,就像這樣:
// app-routing.module.ts imports: [ RouterModule.forRoot(routes) ],
添加路由出口
所謂的路由出口,就是路由所對應(yīng)的組件展示的地方,接下來我們在app.component.html內(nèi)容中,添加
歡迎來到我的個人書屋!
這里的
添加路由鏈接
所謂的路由鏈接,就是出發(fā)路由跳轉(zhuǎn)事件的地方,比如一個按鈕,一張圖片等,我們還是在app.component.html中,使用添加3個按鈕:
這邊3個按鈕的路由,我們將上面定義的3種路由,傳入到routerLink參數(shù)中,現(xiàn)在就項目就可以實現(xiàn)頁面跳轉(zhuǎn)了。
另外,這里還可以傳入一個可選參數(shù)routerLinkActive="className",表示當(dāng)這個標(biāo)簽激活的時候顯示的樣式,值是一個字符串,為樣式的類名:
打開首頁 |
獲取帶參數(shù)路由的參數(shù)
在第7步中,我們點擊 打開書本詳情 按鈕中,在路由中帶了參數(shù),這時候我們需要這么來獲取這個參數(shù):
先導(dǎo)出模塊ActivatedRoute和Location:
// detail.component.ts import { ActivatedRoute } from "@angular/router"; import { Location } from "@angular/common";
再注入到構(gòu)造函數(shù)中,并將值作為私有變量:
// detail.component.ts export class DetailComponent implements OnInit { constructor( private route: ActivatedRoute, private location: Location ) { } ngOnInit() {} }
知識點:
ActivatedRoute 保存該 DetailComponent 實例的路由信息。可以從這個組件獲取URL中的路由參數(shù)和其他數(shù)據(jù)。
Location 是一個 Angular 的服務(wù),用來與瀏覽器打交道。后續(xù)會使用它來導(dǎo)航回上一個視圖。
提取路由參數(shù):
這里聲明getDetail方法,提取路由參數(shù),并ngOnInit生命周期鉤子方法在中執(zhí)行。
// detail.component.ts ngOnInit() { this.getDetail() } getDetail(): void{ const id = +this.route.snapshot.paramMap.get("id"); console.log(`此課本的id是${id}`) }
知識點:
route.snapshot 是一個路由信息的靜態(tài)快照,抓取自組件剛剛創(chuàng)建完畢之后。
paramMap 是一個URL中路由所攜帶的參數(shù)值的對象。"id"對應(yīng)的值就是要獲取的書本的 id。
注意:
路由參數(shù)總會是字符串。這里我們使用 (+) 操作符,將字符串轉(zhuǎn)換成數(shù)字。
現(xiàn)在在瀏覽器上刷新下頁面,再點擊 打開書本詳情 按鈕,可以看到控制臺輸出了 此課本的id是1 的結(jié)果。
到這一步,我們算是把路由配置完成了,接下來可以開始做頁面的邏輯了。
本部分內(nèi)容到這結(jié)束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推薦 | https://github.com/pingan8787... |
JS小冊 | js.pingan8787.com |
微信公眾號 | 前端自習(xí)課 |
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102028.html
摘要:編寫單一組件我們首先寫一個書本信息的組件,代碼如下單個課本像火焰像灰燼程姬知識點是一個的復(fù)寫器指令,就像中的和中的。寫到這里,看看我們項目,還是一樣正常在運行,只是現(xiàn)在項目中組件分工更加明確了。 本文目錄 一、項目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2.編寫服務(wù) 五、...
摘要:發(fā)布通過回調(diào)方法向發(fā)布事件。觀察者一個回調(diào)函數(shù)的集合,它知道如何去監(jiān)聽由提供的值。 本文目錄 一、項目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2.編寫服務(wù) 五、引入RxJS 1.關(guān)于RxJS 2.引入RxJS 3.改造數(shù)據(jù)獲取方式 六、改造組件 1.添...
摘要:然后我們在父組件上添加事件監(jiān)聽,并傳入本地的在對應(yīng)的中添加方法再來,我們在子組件上多導(dǎo)入和,并添加修飾器和調(diào)用這樣就實現(xiàn)了我們父子組件之間的事件傳遞啦,現(xiàn)在我們的頁面還是正常運行,并且刪除一條數(shù)據(jù)后,頁面數(shù)據(jù)會更新。 本文目錄 一、項目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) ...
摘要:最終代碼省略其他輸入類型用標(biāo)識查詢類型需要至少定義一個不要會不顯示查詢這里需要轉(zhuǎn)成數(shù)組因為前面定義了返回值是類型相當(dāng)于數(shù)據(jù)庫的添加操作相當(dāng)于數(shù)據(jù)庫的更新操作省略其他現(xiàn)在我們可以啟動服務(wù)器,在上測試下效果了。 showImg(https://segmentfault.com/img/remote/1460000019142304?w=893&h=438); 看完復(fù)聯(lián)四,我整理了這份 Gr...
摘要:由于之前安裝的是的版本,需要卸載了,安裝最新的版本。清除緩存,確保卸載干凈具體參考安裝最新版本安裝成功后提示意思是版的需要版本最低,我之前的是的版本。先安裝,去下載安裝。在命令行輸入檢查是否安裝成功。 最近聽了大漠老師分享的angular6的講解(附個鏈接大漠老師課程:http://www.ngfans.net/topic/2...),像是沙漠中發(fā)現(xiàn)了綠洲一樣,決定好好學(xué)習(xí)一番,于是準(zhǔn)...
閱讀 3583·2023-04-26 02:10
閱讀 1349·2021-11-22 15:25
閱讀 1687·2021-09-22 10:02
閱讀 924·2021-09-06 15:02
閱讀 3484·2019-08-30 15:55
閱讀 616·2019-08-30 13:58
閱讀 2792·2019-08-30 12:53
閱讀 3072·2019-08-29 12:38