Back to Question Center
0

Ор өнцөг чиглүүлэгчтэй компонент чиглүүлэлт хийх танилцуулга            Чиглүүлэгчийн чиглүүлэгчтэй компонент чиглүүлэх танилцуулгаТухайн сэдэв: JavaScriptnpmTools & Semalt

1 answers:
өнцгийн чиглүүлэгчтэй компонент чиглүүлэлтийн танилцуулга

Энэ нийтлэл нь SitePoint Angular 2+-ийн 4-р хэсэг CRUD App-г өнцгийн CLI-г хэрхэн үүсгэх тухай заавар.


  1. хэсэг 0- эцсийн өнцгийн CLI лавлагааны гарын авлага
  2. 1- 1- р хэсэг 1- Тодо програмын эхний хувилбараа эхлүүлэн, ажиллуулах
  3. 2-р хэсэг: Тодорхой нэг бүрдэл хэсгүүдийн жагсаалт болон нэг todo жагсаалтыг харуулахын тулд тусдаа бүрэлдэхүүн хэсгүүдийг үүсгэх
  4. 3- р хэсэг REST API-тэй харилцах Todo үйлчилгээг шинэчлэх
  5. 4- р хэсэг 4- өгөгдлийг шийдвэрлэх өнцгийн чиглүүлэгчийг ашиглах
  6. 5- р хэсэг 5- Хувийн агуулгыг хамгаалахын тулд нэвтрэлт танилт нэмэх

Онлайнаар зохион байгуулдаг анкет сургалтанд Тодд Моглогийн сүүлчийн өнцгөөс явж чадахгүй. Курсуудыг эндээс , кодыг SITEPOINT_SPECIAL ашиглан 50% авах, SitePoint-ийг дэмжихэд туслах.


Нэгэнт бид Тодо програмаа хэрхэн ажиллуулж, ажиллуулж, түүнийг Semalt хуудсан дээр байрлуулсныг сурсан. Энэ нь зүгээр л ажилласан боловч харамсалтай нь бүх аппликейшн нь нэг бүрэлдэхүүн хэсэг болсон.

Хоёрдугаар хэсэгт бид илүү цогц модульчлагдсан архитектурыг судалж, энэ нэг бүрэлдэхүүн хэсгийг эвдэх, дахин ашиглах, ашиглахад хялбар жижиг бүрэлдэхүүнүүдийн зохион байгуулалттай мод болгон хэрхэн эвдэж сурсаныг мэдэж авсан - alimentatore poe ubiquiti discovery.

Гуравдугаар хэсэгт бид програмыг шинэчилсэн Rx API API-тэй холбогдож RxJS болон Semalt HTTP үйлчилгээг ашиглав.

Энэ хэсэгт бид Semalt чиглүүлэгчийг танилцуулж, вэб хөтөчийн URL өөрчлөгдөх үед бидний програмыг хэрхэн шинэчлэх талаар сурах болно. Мөн бид чиглүүлэгч ашиглан манай арын хуудсаас API-ийн өгөгдлийг шийдвэрлэхийн тулд бид хэрхэн програмаа шинэчлэх талаар суралцах болно.

Бүү санаа зов! Та биш энэ гарын авлагын нэг, хоёр, гурав хичээлийг дагах хэрэгтэй. Та ердөө л манай репогийн хуулбарыг татаж авч болно, гуравдугаар хэсгээс кодыг татаж аваад эхлэх цэг болгон ашиглах боломжтой. Үүнийг доор дэлгэрэнгүй тайлбарласан байгаа.

Адал явдал

Semalt CLI-ийн сүүлийн хувилбарыг суулгасан эсэхээ шалгаарай. Хэрэв та ингэхгүй бол дараах тушаалаар суулгаж болно:

     npm install -g @ өнцөг / cli @ хамгийн сүүлийн үеийн    

Хэрэв та Semalt CLI-ийн өмнөх хувилбарыг устгах шаардлагатай бол та:

     npm uninstall -g @ angular / cli angular-clinpm кэш цэвэрnpm install -g @ angular / cli @ хамгийн сүүлийн үеийн    

Та 3-р хэсгээс кодын хуулбар хэрэгтэй. Үүнийг https: // github дээрээс авах боломжтой. com / sitepoint-editors / өнцөг-todo-апп. Энэ цувралын нийтлэл бүр репозитод холбогдох хаягийг агуулж байгаа тул та програмын өөр өөр мужуудыг хооронд нь шилжүүлэх боломжтой.

Бид 3-р хэсэгт дуусгавар болсон кодыг болон энэ зүйлд энэ тухай эхэлж 3-р хэсэг гэж тэмдэглэсэн. Энэ нийтлэлийн төгсгөлийн кодыг 4-р хэсэг гэж тэмдэглэв.

Тодорхой commit id-тай нэртэй текстийг та бодож болно. Та тэдгээрийн хооронд git checkout ашиглан сольж болно. Та эндээс дэлгэрэнгүй мэдээллийг уншиж болно.

Тэгэхээр, босож ажиллуулахын тулд (Semalt CLI-ийн хамгийн сүүлийн хувилбарыг суулгасан) бид хийх болно:

     git clone git @ github. com: sitepoint-editors / өнцөг-todo-app. gitcd өнцөг-todo-аппgit checkout 3-р хэсэгnpm суулгах хэрэгтэйng serve    

Дараа нь http: // localhost: 4200 / зочилно уу. Хэрвээ бүх зүйл сайн байвал та Todo app-г үзнэ үү.

Хурдан график

Бидний програмын архитектур нь 3-р хэсгийн төгсгөлд байгаа шиг харагдаж байна:

JavaScript чиглүүлэгч гэж юу вэ?

Үндсэндээ Semalt чиглүүлэгч нь 2 зүйлийг хийдэг:

  1. вэб хөтчийн URL өөрчлөгдөх үед вэб аппликешнийг шинэчлэх
  2. вэб програмын төлөв өөрчлөгдөх үед хөтчийн URL шинэчлэх

JavaScript чиглүүлэгч нь Single Page Applications (SPA's) хөгжүүлэх боломжийг бидэнд олгодог.

Нэг хуудас нь семаль програмтай төстэй хэрэглэгчийн туршлагатай вэб програм юм. Single Page Semalt дээр бүх арын хэсгүүдтэй харилцах бүх үйл явдлуудын цаана тохиолдоно.

Хэрэглэгч нэг хуудаснаас нөгөө рүү залгаж байх үед хуудас өөрчлөгдөхгүйгээр динамикаар шинэчлэгддэг.

Олон тооны Semalt чиглүүлэгчийн шийдлүүд байдаг.

Тэдгээрийн зарим нь Angular, ember, React, Vue зэрэг JavaScript дүрсний хувьд тусгайлан бичигдсэн байдаг. js, aurelia гэх мэт. Ерөнхийдөө семальтар шийдлүүд нь ерөнхий зориулалтаар хийгдсэн бөгөөд тодорхой хүрээнд хамааралгүй юм.

Angular чиглүүлэгч гэж юу вэ?

Angular чиглүүлэгч нь Angular Core багананд бичсэн болон хөтлөх албан ёсны өнцүүрийн чиглүүлэлтийн сан юм.

Энэ нь өнцгөөс ажиллахад зориулж хийгдсэн JavaScript чиглүүлэгчийн хэрэгжүүлэлт бөгөөд @ өнцгийн / чиглүүлэгч гэж багцлана.

Нэгдүгээр өнцөг чиглүүлэгч нь Semalt чиглүүлэгчийн үүргийг анхаарч үздэг:

  • Хэрэглэгч нь тодорхой URL
  • руу залгаж байх үед хуудсыг зохиоход шаардлагатай бүх элементүүдийг идэвхжүүлдэг
  • Энэ нь хэрэглэгч хуудсаа дахин ачаалалгүйгээр нэг хуудаснаас нөгөө рүү нүүлгэх боломжийг олгодог
  • Энэ нь хөтчийн түүхийг шинэчилдэг учраас хуудсууд
  • хоёрын хооронд буцах замдаа буцах ба

Үүнээс гадна, Semalt чиглүүлэгч нь бидэнд:

  • өөр URL руу URL шилжүүлэх
  • хуудас харагдахын өмнө өгөгдлийг шийдвэрлэх
  • хуудсыг идэвхжүүлсэн эсвэл идэвхгүй болгосон үед скриптүүдийг ажиллуулдаг
  • Бидний хэрэглээний залхуу ачааны хэсэг

Энэ өгүүлэлд бид өнцгийн чиглүүлэгчийг хэрхэн тохируулах, тохируулах, хэрхэн URL-ыг дахин чиглүүлэх, арын өнцөгтийн API -ээс todo-г хэрхэн шийдэхийн тулд өнцөг чиглүүлэгчийг хэрхэн ашиглах талаар сурах болно.

Дараагийн өгүүлэл дээр бид хэрэглэгчийн нэвтрэх явцад зарим хуудсууд зөвхөн хандах боломжтой эсэхийг баталгаажуулахын тулд чиглүүлэгчийг ашиглах болно.

Angular чиглүүлэгч хэрхэн ажилладаг вэ

Кодыг хайхаас өмнө Semalt чиглүүлэгч хэрхэн ажилладаг талаархи ойлголтыг ойлгох нь чухал юм. Та энэ цувралд аажмаар эдгээр асуудлыг шийдэж, Semalt чиглүүлэгчтэй илүү туршлагатай боллоо.

Angular чиглүүлэгчийг ашигладаг өнцөг програм зөвхөн нэг чиглүүлэгчийн үйлчилгээний жишээтэй байдаг; Энэ бол ганц бие. Хэзээ, хаана ч гэсэн Чиглүүлэгч програмыг тараана уу, та аль өнцөг чиглүүлэгчийн үйлчилгээнд хандах болно.

Semalt чиглүүлэлтийн процессыг илүү нарийвчлалтай хайхын тулд Semalt чиглүүлэгчийн навигацийн 7-алхамт чиглүүлэлтийн процессыг шалгана уу.

Чиглүүлэлтийг идэвхжүүлэх

Semalt програмын чиглүүлэлтийг идэвхжүүлэхийн тулд бид 3 зүйлийг хийх хэрэгтэй:

  1. бидний өргөдлийн боломжит мужуудыг тодорхойлдог чиглүүлэлтийн тохиргоо үүсгэх
  2. чиглүүлэлтийн тохиргоог манай програмдаа оруулж
  3. DOM-ийн идэвхжүүлсэн бүрэлдэхүүн хэсгүүдийг хаана байрлуулах өнцөг чиглүүлэгчийг хэлэх чиглүүлэгчийн цэгийг нэмнэ

Тиймээс чиглүүлэлтийн тохиргоог үүсгэх хэрэгтэй.

Чиглүүлэлтийн тохиргоог үүсгэх

Бидний чиглүүлэлтийн тохиргоог үүсгэхийн тулд бид таны хүссэн URL-уудын жагсаалтыг дэмжих хэрэгтэй.

Semalt, бидний хэрэглээ бол маш энгийн бөгөөд зөвхөн нэг хуудсыг харуулсан байна.

  • / : todo's
  • -ийн шоуны жагсаалт

нь програмын эх хуудас болох todo-ийн жагсаалтыг харуулах болно.

Гэсэн хэдий ч хэрэглэгчийн браузер / браузер дээрээ өөрсдийнх нь жагсаалтыг үзэхийн тулд бид өөрсдийн вэбсайтны вэбсайтын агуулгыг өөрчилдөг (энэ цуврал 5-ын хэсэг дээр бид хийх болно) Урт хугацаагаар тэдний бүх жагсаалтыг үзүүлж байна.

Тиймээс бид өөрсдийн URL-ыг өөрийн URL-оор жагсаагаад өөрийн нүүр хуудсыг дахин чиглүүлье:

  • / : / todos руу чиглүүлэх
  • / todos : todo's
  • -ийн шоуны жагсаалт

Энэ нь бидэнд хоёр ашиг тус өгдөг:

  • хэрэглэгчид todos хуудсаа хавчуурга хийх үед, тэдний хөтөч нь / -ийн оронд / todos
  • Бид одоо вэбсайтаа байнга өөрчлөх хэрэгтэй байгаа бол манай вэбсайтаа амархан өөрчлөх боломжтой дурын URL руу шилжүүлж болно

Албан өнцөг маягийн чиглүүлэгч хөтөч нь -т төгсгөлд нь файлын нэртэй файл бүхий Angular модулийг чиглүүлэлтийн тохиргоог хадгалахыг зөвлөдөг. модуль. ts нь тусдаа Angular модулийг төгсгөлийн нэрээр экспортолж байгаа RoutingModule .

Манай одоогийн модулийг AppModule гэж нэрлэдэг тул бид src / app / app-routing файлыг үүсгэдэг. модуль. ts , бидний чиглүүлэлтийн тохиргоог AppRoutingModule гэж нэрлэдэг Angular модулиар экспорт хийнэ

     import {NgModule} '@ өнцөг / цөм' -ээс;import {RouterModule, Routes} '@ өнцөг / чиглүүлэгч';import {AppComponent} '. / апп. бүрэлдэхүүн хэсэг ';чиглүүлэлтийн маршрут: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: 'todos',бүрэлдэхүүн хэсэг: AppComponent}];@NgModule ({импорт: [RouterModule. forRoot (чиглүүлэлтүүд)],экспорт: [RouterModule],үйлчилгээ үзүүлэгчид: []})экспортын ангилал AppRoutingModule {}    

Эхлээд бид импортлодог RouterModule ба @ өнцгийн / чиглүүлэгч чиглүүлэгч :

     'import {RouterModule, Routes}' @ өнцөг / чиглүүлэгч ';    

Дараа нь бид Router төрлийн чиглэл чиглэлийг тодорхойлж бидний чиглүүлэгчийн тохиргоог:

     чиглүүлэлтүүд: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: 'todos',бүрэлдэхүүн хэсэг: AppComponent}];    

Чиглүүлэлтүүд төрөл нь заавал байх бөгөөд IDE нь TypeScript дэмжлэгтэй эсвэл TypeScript хөрвүүлэгчийг хөгжүүлэх явцад таны чиглүүлэлтийн тохиргоог зөв тохируулна.

Энэ нь маршрутын мод юм, Semalt массив гэж тодорхойлогддог, маршрут бүр нь дараах шинж чанартай байна:

  • зам : мөр, URL тохирох зам
  • patchMatch : мөр, URL хэрхэн таарах вэ
  • бүрэлдэхүүн хэсэг : ангийн чиглүүлэлт, энэ чиглэлийг идэвхжүүлсэн үед идэвхжүүлэх бүрэлдэхүүн хэсэг
  • redirectTo : string, URL нь энэ чиглэлийг идэвхжүүлсэн үед чиглүүлэх URL руу шилжих
  • өгөгдөл : өгөгдлийн статик өгөгдөл
  • шийдвэрлэх : дата шийдвэрлэхэд өгөгдлийг шийдвэрлэх болон динамик өгөгдөл
  • хүүхэд : хүүхдийн чиглэл

Бидний өргөдөл нь энгийн бөгөөд зөвхөн хоёр дүүтэй замыг агуулдаг боловч илүү том програм нь хүүхдийн чиглүүлэлтийн тохиргоог хийж болно:

     чиглүүлэлтүүд: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: 'todos',хүүхдүүд: [{зам: '',бүрэлдэхүүн хэсэг: 'TodosPageComponent'},{зам: ': id',бүрэлдэхүүн хэсэг: 'TodoPageComponent'}]}];    
бол todos нь хоёр хүүхдийн маршруттай бөгөөд : id нь чиглүүлэлтийн параметр нь дараах чиг хандлагыг танихыг чиглүүлэгч:
  • / : нүүр хуудас, 76 руу шилжүүлэх
  • / todos : идэвхжүүлэх TodosPageComponent болон todo's
  • / todos / 1 : идэвхжүүлэх TodoPageComponent : id параметр 1
  • / todos / 2 : идэвхжүүлэх TodoPageComponent : id

Бид хэрхэн хэрхэн зааж байгааг анхаараарай patchMatch: 'full' динамикийг тодорхойлох үед.

Semalt чиглүүлэгч нь тохирох хоёр стратегитай:

  • угтвар : default нь зам
  • бүтэн : URL нь нь зам

Хэрэв бид дараах чиглэлийг үүсгэвэл:

     // ямар ч pathMatch тодорхойлогдоогүй байгаа учраас өнцгийн чиглүүлэгч үүнийг хэрэглэдэг// анхдагч `prefix` pathMatch{зам: '',redirectTo: 'todos'}    

дараа нь Angular чиглүүлэгч нь анхдагч угтвар замыг тааруулах стратеги болон URL бүрийг todos -д заасан .

Манай вэбсайтыг todos уруу дахин чиглүүлэхийг хүсч байна, тэгэхээр бид pathMatch: 'full' нэмж URL нь хоосон мөр '' таарч байна:

     {зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'}    

Өөр өөр чиглүүлэлтийн тохиргооны сонголтуудын талаар илүү ихийг мэдэхийг хүсвэл Routing and Navigation талаар албан ёсны Англик баримтжуулалтыг шалгаарай.

Эцэст нь хэлэхэд, Angular модуль AppRoutingModule :

     @NgModule ({импорт: [RouterModule. forRoot (чиглүүлэлтүүд)],экспорт: [RouterModule],үйлчилгээ үзүүлэгчид: []})экспортын ангилал AppRoutingModule {}    

Semalt нь чиглүүлгийн модуль үүсгэх хоёр арга зам юм:

  1. RouterModule. forRoot (чиглүүлэлтүүд) : чиглүүлэгчийн чиглүүлэг (route) ба чиглүүлэгч үйлчилгээ
  2. RouterModule. forChild (чиглүүлэлтүүд) : чиглүүлэгч модуль үүсгэх чиглүүлэгч модулийг үүсгэдэг бөгөөд чиглүүлэгчийн чиг үүргийг чиглүүлэгч

RouterModule . Таны програм олон чиглүүлэлтийн модулиудтай болбол forild арга хэрэгтэй. Нэг хөтөч URL-тай харилцдаг олон тооны олон чиглүүлэгчийн үйлчилгээнүүд нь асуудлуудтай тулгардаг тул манай өргөдлийн үйлчилгээний ганцхан жишээ байдаг бөгөөд энэ нь бидний програмд ​​хичнээн олон чиглүүлэлтийн модулууд байсан ч хамаагүй чухал юм.

Бид RouterModule ашиглан үүсгэгдсэн чиглүүлэлтийн модулийг импортлох үед. forRoot , Angular нь чиглүүлэгчийн үйлчилгээг үзүүлэх болно. Бид чиглүүлэлтийн модулийг RouterModule ашиглан үүсгэж байх үед. forChild , Angular will биш чиглүүлэгчийн үйлчилгээг үзүүлэх болно.

Тиймээс бид зөвхөн RouterModule -ийг ашиглаж болно. forRoot нэг удаа ашиглах RouterModule. forChild нэмэлт чиглүүлэлтийн модулиудын хувьд олон удаа.

Бидний програм зөвхөн нэг чиглүүлгийн модультай учраас бид RouterModule -ийг ашигладаг. forRoot :

     импортлогч: [RouterModule. forRoot (чиглүүлэлтүүд)]    

Үүний зэрэгцээ экспортын 62 property чиглүүлэгчийн модулийг зааж өгдөг:

     экспорт: [Чиглүүлэгчийн модуль]    

AppModule импорт AppRoutingModule үед AppModule дахин импортлох шаардлагагүй болно.

Одоо бид AppRoutingModule байгаа бол үүнийг AppModule дээрээ оруулах хэрэгтэй.

Чиглүүлэлтийн тохиргоог оруулж байна

Бидний чиглүүлэлтийн тохиргоог манай өргөдлийн хувьд импортлохын тулд AppRoutingModule -ийг манай гол AppModule руу импортлох ёстой.

src / app / app нээгээд үзье. модуль. AppModule 's @NgModule метадатад AppRoutingModule импорт array

     импортоор {BrowserModule} '@ өнцөг / платформ-хөтөчөөс';import {NgModule} '@ angular / core' -соос;import {FormsModule} '@ өнцөг / хэлбэрүүдээс';import {HttpModule} '@ өнцөг / http';import {AppComponent} '. / апп. бүрэлдэхүүн хэсэг ';import {TodoListComponent} '. / todo-list / todo-list. бүрэлдэхүүн хэсэг ';import {TodoListFooterComponent} '. / todo-list-footer / todo-list-footer. бүрэлдэхүүн хэсэг ';import {TodoListHeaderComponent} '. / todo-list-header / todo-list-header. бүрэлдэхүүн хэсэг ';import {TodoDataService} '. / todo-өгөгдөл. үйлчилгээ ';import {TodoListItemComponent} '. / todo-list-item / todo-list-item. бүрэлдэхүүн хэсэг ';import {ApiService} '. / api. үйлчилгээ ';import {AppRoutingModule} '. / апп-чиглүүлэх. модуль ';@NgModule ({мэдэгдэл: [AppComponent,TodoListComponent,TodoListFooterComponent,TodoListHeaderComponent,TodoListItemComponent],импорт: [AppRoutingModule,BrowserModule,FormsModule,HttpModule],үйлчилгээ үзүүлэгч: [TodoDataService, ApiService],bootstrap: [AppComponent]})экспортын анги AppModule {}    
AppRoutingModule нь экспресс property -д жагсаасан RoutingModule байна AppRoutingModule 62), тэгэхээр бид шууд импортыг оруулах шаардлагагүй RouterModule дахин (хэдийгээр энэ нь ямар ч хор хөнөөл учруулахгүй).

Бид браузер дахь бидний өөрчлөлтүүдийг туршиж үзээд бид гуравт, эцсийн шатыг дуусгах хэрэгтэй.

Чиглүүлэгч залгуурыг нэмэх

Бидний програм одоо чиглүүлэлтийн тохиргоотой байгаа ч гэсэн бид өнцөг чиглүүлэгчид DOM-д илэрхийлэгдсэн бүрэлдэхүүн хэсгүүдийг байрлуулж болох байршлыг чиглүүлэх хэрэгтэй.

AppModule :

-ийн 76-ийн bootstrap property AppComponent -д жагсаагдсан тул AppComponent
     @NgModule ({//. . 

элемент нь DOM доторх бүрэлдэхүүн хэсгүүдийг илэрхийлэх өнцөг чиглэгч рүү хэлдэг.

Хэрэв та танилular AngularJS 1. x чиглүүлэгч болон UI-Чиглүүлэгчийн хувьд 76-р өнцгөөс ng-view ба ui-view .

элемент байхгүй бол Angular чиглүүлэгч нь бүрэлдэхүүн хэсгүүдийг хаана байрлуулахаа мэдэхгүй бөгөөд зөвхөн AppComponent -н өөрийн HTML үзүүлэх болно .

AppComponent одоогоор todo-ийн жагсаалтыг харуулж байна.

AppComponent нь todo-ийн жагсаалтыг харуулахын оронд AppComponent
AppComponent дотор өөр бүрэлдэхүүнийг үүсгэх Angular чиглүүлэгчийг хэлэхийн тулд todo-ийн жагсаалтыг харуулах.

Үүнийг хийхийн тулд шинэ бүрэлдэхүүн хэсэг TodosComponent өнцгийн CLI-г ашиглана уу:

     $ ng нь Todos компанийг бүрдүүлдэг    

болон бүх HTML-ийг src / app / app-аас шилжүүлээрэй. бүрэлдэхүүн хэсэг. html to src / app / todos / todos. бүрэлдэхүүн хэсэг. html :

          

болон src / app / апп -ийн бүх логикууд. бүрэлдэхүүн хэсэг. ts to src / app / todos / todos. бүрэлдэхүүн хэсэг. ts :

     / * src / app / todos / todos. бүрэлдэхүүн хэсэг. ts * /'@ angular / core' импорт {Component, OnInit};import {TodoDataService} '. / todo-өгөгдөл. үйлчилгээ ';import {Todo} аас '. /хийх';@ Хамтрагч ({сонгон шалгаруулагч: 'app-todos',загварUrl: '. / todos. бүрэлдэхүүн хэсэг. html ',styleUrls: ['. / todos. бүрэлдэхүүн хэсэг. css '],үйлчилгээ үзүүлэгчид: [TodoDataService]})экспортын анги TodosComponent implements OnInit {todos: Todo [] = [];байгуулагч (хувийн todoDataService: TodoDataService) {}public ngOnInit    {энэ нь. todoDataService. getAllTodos   . захиалах ((todos) => {энэ нь. todos = todos;});}onAddTodo (todo) {энэ нь. todoDataService. addTodo (todo). захиалах ((newTodo) => {энэ нь. todos = энэ. todos. concat (newTodo);});}onToggleTodoComplete (todo) {энэ нь. todoDataService. toggleTodoComplete (todo). захиалах ((updatedTodo) => {todo = updatedTodo;});}onRemoveTodo (todo) {энэ нь. todoDataService. deleteTodoById (todo id). захиалах ((_) => {энэ нь. todos = энэ. todos. шүүлтүүр ((t) => t. id! == todo. id);});}}    

Одоо бид AppComponent -н загварыг src / app / апп дотор орлуулж болно. бүрэлдэхүүн хэсэг. html нь:

        

болон хуучирсан кодыг AppComponent ангиас src / апп / апп дээрээс хас. бүрэлдэхүүн хэсэг. ts :

     '{өнцөг / цөм' -ээс импортлох {бүрэлдэхүүн хэсэг};@ Хамтрагч ({Сонголтынх: 'app-root',загварUrl: '. / апп. бүрэлдэхүүн хэсэг. html ',styleUrls: ['. / апп. бүрэлдэхүүн хэсэг. css '],})экспортын анги AppComponent {}    

Эцэст нь, бид todos чиглүүлэлтийг src / app / app-routing -д шинэчилнэ. модуль.

Бөөрөлзгөн дэх бидний өөрчлөлтийг туршиж үзээрэй.

Өөрийн хөгжүүлэлтийн сервер болон таны арын хэсгийн API-г ажиллуулаарай:

     $ ng үйлчлэх$ npm нь json-серверийг ажиллуулна    

болон хөтчийг http: // localhost: 4200 руу залгана уу.

өнцгийн чиглүүлэгч нь чиглүүлэгчийн тохиргоог уншиж автоматаар манай хөтөчийг http: // localhost: 4200 / todos руу дахин чиглүүлдэг.

Хэрэв та хуудсан дээрх элементүүдийг шалгаж үзвэл TodosComponent дотор дотор биш, харин Энэ нь:

        

Бидний програм одоо чиглүүлэлт идэвхжсэн байна. Гайхалтай!

Орлуулах тэмдгийг нэмж байна

Хэрэв та браузераа руу http: // localhost: 4200 / unmatched-url руу шилжихдээ, та хөтөчийнхөө хөгжүүлэгч багажуудыг нээгээд өнцгийн чиглүүлэгч консол руу дараах алдааг бүртгэнэ:

     Алдаа: Ямар ч маршрут таарахгүй байна. URL Сегмент: 'Unmatched-url'    

Төгсгүй Semtalt -ийг зохицуулахын тулд бид хоёр зүйлийг хийх хэрэгтэй:

  1. Хуудас PageNotFoundComponent (хэрэв та хүсвэл үүнийг өөрөөр нэрлэж болно) хүссэн хуудас олдоогүй нөхөрсөг зурвасыг харуулах
  2. PageNotFoundComponent PageNotFoundComponent харуулах өнцөг чиглүүлэгчийг өгөгдөл хүсээгүй URL
  3. таарахгүй байх үед

Эхлэл CLI ашиглан PageNotFoundComponent үүсгэж эхлэх хэрэгтэй:

     $ ng нь PageNotFound компонентийг үүсгэдэг    

болон түүний загварыг -д олдсон бол / src / app / page-not-found / хуудас-олоогүй. бүрэлдэхүүн хэсэг. html :

    

Уучлаарай, хүссэн хуудас олдсонгүй.

Дараа нь бид зорчигчийн замыг ** ашиглан замыг нэмнэ:

     чиглүүлэлтүүд: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: 'todos',бүрэлдэхүүн хэсэг: AppComponent},{зам: '**',бүрэлдэхүүн хэсэг: PageNotFoundComponent}];    

** нь ямар ч URL, түүний дотор хүүхдийн замыг заана.

Одоо хэрэв та браузераа руу http: // localhost: 4200 / харьцуулшгүй-url , PageNotFoundComponent руу чиглүүлбэл.

Зорчигчын зам нь бидний чиглүүлэлтийн тохиргооны сүүлчийн зам байх ёстой гэж бодож байгаа мэт санагдана.

Semalt чиглүүлэгч нь хүсэлтийн URL-ыг чиглүүлэгчийн тохиргоонд тааруулах үед эхний тоглолтыг олсон даруйд процессыг зогсооно.

Тэгэхээр бид маршрутын дарааллыг солих хэрэгтэй:

     чиглүүлэлтүүд: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: '**',бүрэлдэхүүн хэсэг: PageNotFoundComponent},{зам: 'todos',бүрэлдэхүүн хэсэг: AppComponent}];    

дараа нь todos хэзээ ч хүрч чадахгүй, PageNotFoundComponent нь харуулах болно.

Бид аль хэдийн маш их зүйлийг хийсэн. Одоогоор бидний хийж гүйцэтгэсэн зүйлсийг хурдан тооцоолъё:

  • Бид өнцгийн чиглүүлэгчийг тохируулах
  • Бид програмын чиглүүлэлтийн тохиргоог үүсгэсэн
  • Бид refactored AppComponent to TodosComponent
  • бид -н загвар
  • <61-р холболт <
  • Бид хоёулаа хосгүй URL-уудтай ажиллахын тулд нийтийн нислэгийн маршрутыг нэмсэн

Дараа нь бид одоо байгаа todo-г бидний Semender чиглүүлэгч ашиглан бидний backend API -ээс татаж авах resolver -ийг үүсгэх болно.

Одоогоор бид хөтөчөө todos URL руу залахад, дараах зүйлс тохиолдоно:

  1. өнцгийн чиглүүлэгч нь todos URL
  2. Angular чиглүүлэгч нь TodosComponent
  3. өнцгийн чиглүүлэгч нь DOM
  4. дээр TodosComponent дараагийн
  5. TodosComponent нь хоосон масстай alldo's
  6. ToddComponent -ийн 76 дахь handler ngOnInit гарын авлагын API (API)
  7. The TodosComponent API
  8. -ээс татаж авахын тулд todo-ээр хөтчөөр шинэчлэгддэг.

5 дахь алхамд todo-г ачаалах үед 3 секунд зарцуулагдана. Хэрэглэгч та жинхэнэ todo-ыг 6-р алхамд харуулахаас өмнө 3 секундэд хоосон todo жагсаалтаар танилцуулагдах болно

Хэрэв TodosComponent нь дараахь загварыг HTML загвартаа оруулах байсан бол:

   
Та одоогоор одоогоор байхгүй байна.

дээр хэрэглэгчид яг жинхэнэ todo-ууд харуулагдахаас өмнө 3 секундын турш энэ зурвасыг хардаг бөгөөд энэ нь хэрэглэгчид жинхэнэ төөрөгдөлд ороод, бодит өгөгдлүүдийг оруулалгүйгээр хэрэглэгчийг замаас гаргахад хүргэдэг.

Өгөгдөл ачаалах үед ээрэхийг харуулсан TodosComponent

ачаалагчийг нэмэх боломжтой боловч заримдаа бид бодит бүрэлдэхүүнийг хянах боломжгүй байж болох юм. Жишээ нь бид гуравдагч талын бүрэлдэхүүнийг ашиглах үед.

Энэхүү хүсээгүй зан үйлийг засахын тулд бид дараах зүйлсийг хийх хэрэгтэй:

  1. өнцгийн чиглүүлэгч нь todos URL
  2. өнцгийн чиглүүлэгч нь todo-г API
  3. дээрээс татаж авдаг.
  4. Angular чиглүүлэгч нь TodosComponent
  5. өнцгийн чиглүүлэгч нь DOM
  6. дээр TodosComponent дараагийн
  7. TodosComponent нь API
  8. -ээс татаж авдаг бүх зүйлтэй хөтөч дээр гарч ирдэг.

TodosComponent нь бидний API арын мэдээлэлээс мэдээлэл харуулахгүй.

Энэ нь бидний хувьд тодорхойлогчийн хийж чадах зүйл юм.

TodoComponent идэвхжүүлэхээсээ өмнө Angular чиглүүлэгчийг тохируулахын тулд бид дараах хоёр зүйлийг хийх ёстой:

  1. Бүх хандалтыг API
  2. хаягаас татаж авах TodosResolver todos чиглэлийн дахь TodosComponent -ийг идэвхжүүлэхэд ToddResolver

Өгөгдлийг эхлээд TodosComponent идэвхижүүлэхийн тулд өнцөг чиглүүлэгчээс асуух замаар todos тогтоогчийг холбож үзээрэй.

Тэгэхээр бидний бүх зүйлийг татаж авах шийдвэр гаргагъя.

TodosResolver үүсгэх

Дараагийн CLI нь тогтоогчийг үүсгэх тушаал байхгүй тул src / todos файлыг үүсгэе. Шалгагч. ts гараар дараах кодыг нэмнэ:

     импортоор {тараагдах} '@ өнцгийн / цөм' -ээс;import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} '@ өнцөг / чиглүүлэгч';импорт {Ажиглагдсан} 'rxjs / Observable';import {Todo} аас '. /хийх';import {TodoDataService} '. / todo-өгөгдөл. үйлчилгээ ';@Injectable   экспортын анги TodosResolver хэрэгжүүлдэг Шалгах <Ажиглах   > {байгуулагч (хувийн todoDataService: TodoDataService) {}нийтийн шийдвэр (маршрут: ActivatedRouteSnapshot,state: RouterStateSnapshot): Ажиглагдсан    {үүнийг буцааж өгнө үү. todoDataService. getAllTodos   ;}}    

Бид шийдвэрийн Шийх интерфейсийг хэрэгжүүлдэг классыг тодорхойлно.

Шийтийн интерфэйс нь заавал байх ёстой боловч TypeScript IDE эсвэл compiler-ийг бид шийдвэрлэх аргыг хэрэгжүүлэхийг шаардаж.

Хэрэв шийдвэрлэх арга нь амлалт эсвэл ажиглагдах өнцгөө буцаавал өнцгийн чиглүүлэгч нь амлалтын хүлээхийг эсвэл хүлээгдэж байгаа чиглэлийг идэвхжүүлэхээс өмнө гүйцэд хүлээнэ.

шийдвэрлэх аргыг дуудах үед Angular чиглүүлэгч нь идэвхтэй чиглүүлэлтийн замын хормын хувилбар болон чиглүүлэгчийн төлвийн мэдээллийг бидэнтэй (өгөгдлийн хандалтын параметрүүд эсвэл асуулгын параметрүүд гэх мэт) хандах боломжийг бидэнд олгодог. өгөгдлийг шийдвэрлэх.

TodosResolver код нь бидэнд маш сайн товч бөгөөд TodoDataService бидний API backend-тай харилцах бүх харилцааг зохицуулдаг.

Бид бүтээсний TodoDataService inject getAllTodos аргыг ашиглаад шийдвэрлэх аргаар татаж авах.

Туршилтын арга нь Todo [] төрлийг ажиглаж болох бөгөөд чиглүүлэгчийн бүрэлдэхүүн идэвхжсэн байхаас өмнө Angular чиглүүлэгч нь ажиглагдахаар хүлээгдэж байна.

Одоо бид өөрсдийн шалгагч байна, үүнийг ашиглахын тулд Semalt чиглүүлэгчийг тохируулъя.

Буухиа шууд чиглүүлэгчийг засах

Semalt router -ийг тогтоолыг ашиглахын тулд бид чиглүүлэлтийн тохиргоог хийх ёстой.

src / app-routing нээгээд үзье. модуль. ts , TodosResolver руу todos чиглүүлэх:

     import {NgModule} '@ өнцөг / цөм' -ээс;import {RouterModule, Routes} '@ өнцөг / чиглүүлэгч';импортоос {PageNotFoundComponent} '. / хуудас-олдохгүй / хуудас олдсонгүй. бүрэлдэхүүн хэсэг ';import {TodosComponent} '. / todos / todos. бүрэлдэхүүн хэсэг ';import {TodosResolver} '. / todos. шийдвэрлэгч ';чиглүүлэлтийн маршрут: Чиглүүд = [{зам: '',redirectTo: 'todos',pathMatch: 'бүтэн'},{зам: 'todos',бүрэлдэхүүн хэсэг: TodosComponent,шийдэх: {todos: TodosResolver}},{зам: '**',бүрэлдэхүүн хэсэг: PageNotFoundComponent}];@NgModule ({импорт: [RouterModule. forRoot (чиглүүлэлтүүд)],экспорт: [RouterModule],үйлчилгээ үзүүлэгчид: [TodosResolver]})экспортын ангилал AppRoutingModule {}    

Бид импортлох TodosResolver :

     import {TodosResolver} '. / todos. шийдвэрлэгч ';    

болон todos чиглүүлэгчийн хэлбэрээр нэмнэ:

     {зам: 'todos',бүрэлдэхүүн хэсэг: TodosComponent,шийдэх: {todos: TodosResolver}}    

Энэ өгөгдлийг маршрутын өгөгдөлд TodosResolver ашиглан өгөгдлийг шийдвэрлэхийн тулд Angular чиглүүлэгчид өгч, өгөгдөл дамжуулагчийн өгөгдлийг буцаах утгыг todos гэж зааж өгдөг.

Замын өгөгдлийг ActivatedRoute эсвэл ActivatedRouteSnapshot хэсгээс хандаж болно. Үүнийг дараагийн хэсэгт үзэх болно.

Замын өгөгдлийг өгөгдөл ашиглан ашиглан статик өгөгдлийг шууд өгч болно:

     {зам: 'todos',бүрэлдэхүүн хэсэг: TodosComponent,өгөгдөл: {гарчиг: 'Стандарт маршрутын өгөгдлийн жишээ'}}    

эсвэл динамик өгөгдлийг маршрутын өмчийг шийдвэрлэх -д заасан динамик өгөгдөл:

     шийдвэрлэх: {зам: 'todos',бүрэлдэхүүн хэсэг: TodosComponent,шийдэх: {todos: TodosResolver}}    

эсвэл хоёуланд нь:

     шийдвэрлэх: {зам: 'todos',бүрэлдэхүүн хэсэг: TodosComponent,өгөгдөл: {гарчиг: 'Стандарт маршрутын өгөгдлийн жишээ'}шийдэх: {todos: TodosResolver}}    

шийдлийн шийдэл шийдэж дууссаны дараа тэдгээр утгууд нь өгөгдлийн өмчөөс статик өгөгдөлд нэгтгэгдсэн бөгөөд өгөгдөл нь маршрутын өгөгдөл болох боломжтой. forRoot (чиглүүлэлтүүд)],экспорт: [RouterModule],үйлчилгээ үзүүлэгчид: [TodosResolver]})экспортын ангилал AppRoutingModule {}

Өөрийн браузерыг руу чиглүүлэхдээ: http: // localhost: 4200 , Одоо өнцөг чиглүүлэгч:

  1. нь URL / -аас / todos
  2. 76 todos маршрут нь шийдэлд өмч
  3. -д заасан TodosResolver Тогтсон Ресолвер -аас шийдвэрлэх аргыг үр дүн хүлээж, үр дүнг өгөгдөлд todos
  4. идэвхтэй TodosComponent

Хэрэв та хөгжүүлэгчийн хэрэгслүүдийн сүлжээний цонхыг нээсэн бол, та бүхэн API-ээс хоёр удаа татаж авах болно гэдгийг харах болно. Дараа нь өнцөг чиглүүлэгч, нэг удаа ngOnInit handler TodosComponent -д.

Тиймээс Angular чиглүүлэгч нь API-г бүхэлд нь татаж авдаг бол TodosComponent нь өөрийн дотоод логикийг ашигладаг.

Дараагийн хэсэгт бид өмнөх талбарт чиглүүлэгчийн өгөгдлийг ашиглахын тулд TodosComponent шинэчилнэ.

Шийдсэн өгөгдлийг ашиглах

app / src / todos / todos програмыг нээнэ. бүрэлдэхүүн хэсэг. ts .

ngOnInit handler нь todo-г шууд API-ээс татаж авдаг:

     public ngOnInit    {энэ нь. todoDataService. getAllTodos   . захиалах ((todos) => {энэ нь. todos = todos;});}    

Одоо Angular чиглүүлэгчийг TodoResolver ашиглан todo-уудыг ашигладаг болсон. Бидэнд TodosComponent -д API-ийн оронд өгөгдлийн замаас todo-г авахыг хүсэж байна.

Замын өгөгдөлд хандахын тулд @ular / чиглүүлэгч -аас идэвхжүүлсэн ActivatedRoute импортыг оруулах ёстой

  {353} '@ өнцөг / чиглүүлэгчээс импорт {ActivatedRoute};    

, идэвхжүүлсэн замын бариулыг авахын тулд Semalt хамаарлын тарилга ашиглана:

     байгуулагч (хувийн todoDataService: TodoDataService,хувийн зам: ActivatedRoute) {}    

Эцэст нь, бид ngOnInit зохицуулагчийг API-ийн оронд чиглүүлэх өгөгдлөөс todo-г авахын тулд бид шинэчилдэг:

     public ngOnInit    {энэ нь. маршрут. өгөгдөл. газрын зураг ((өгөгдөл) => өгөгдөл ['todos']). захиалах ((todos) => {энэ нь. todos = todos;});}    

ActivatedRoute чиглүүлэлтийн өгөгдлийг ажиглагдах боломжтой болгож байгаа тул бидний код өөрчлөгдөөгүй.

Бид үүнийг солих . todoDataService. getAllTodos ашиглан энэ байна. маршрут. өгөгдөл. map ((өгөгдөл) => өгөгдөл ['todos']) болон үлдсэн бүх код өөрчлөгдөхгүй хэвээр байна.

Хэрэв та браузерыг localhost: 4200 руу нээж сүлжээнийхээ цонхыг нээгээд байвал та HTTP хүсэлтүүдийг API-ээс татаж авахын тулд хоёр HTTP хүсэлтийг харахгүй болно.

Номлол амжилттай болсон! Бид програмынхаа Семаль чиглүүлэгчийг амжилттай нэгтгэсэн.

Биднийг буулгадаг семальс, нэгжийн тестийг ажиллуулъя:

     ng serve    

1 нэгж туршилт амжилтгүй болсон:

     11-ийн 11-ээс (1 FAILED)TodosComponent нь FAILED-г үүсгэх ёстой'app-todo-list-header' нь мэдэгдэж байгаа элемент биш юм    
TodosComponent -ийг турших үед tester нь TodoListHeaderComponent талаар мэддэггүй бөгөөд Angular нь app-todo-list-header бүрэлдэхүүн.

Энэ алдааг засахын тулд app / src / todos / todos нээнэ. бүрэлдэхүүн хэсэг. spec. ts ба NO_ERRORS_SCHEMA TestBed сонголтууд руу нэмнэ:

     өмнөх бүр (async (   => {TestBed. configureTestingModule ({мэдэгдэл: [TodosComponent],схем: [NO_ERRORS_SCHEMA]}). configureTestingModule ({мэдэгдэл: [TodosComponent],схем: [NO_ERRORS_SCHEMA],үйлчилгээ үзүүлэгчид: [TodoDataService,{өгөх: ApiService,useClass: ApiMockService}],}). compileComponents   ;}));    

нь дахин нэг алдаа гаргана:

     11-ийн 11-ээс (1 FAILED)TodosComponent нь FAILED-г үүсгэх ёстойActivatedRoute-д үйлчилгээ үзүүлэгч байхгүй байна !!    

ActivatedRoute -ийг турших сонголтуудад нэг дахин үзүүлэгч нэмээд үзье:

     өмнөх бүр (async (   => {TestBed. configureTestingModule ({мэдэгдэл: [TodosComponent],схем: [NO_ERRORS_SCHEMA],үйлчилгээ үзүүлэгчид: [TodoDataService,{өгөх: ApiService,useClass: ApiMockService},{өгөх: ActivatedRoute,useValue: {өгөгдөл: Ажиглагдсан. ({todos: []})}}],}). compileComponents   ;}));    
ActivatedRoute нь үзүүлэгчийн хувьд 76 todos-ийн туршилтын утгыг илрүүлэхийн тулд мэдэгдэж байгаа өгөгдлийн шинж чанар бүхий агшдаг обьектийн обьектыг онооллодог.

Одоо нэгж туршилтыг амжилттай дамжуулж байна:

     11-ийн 11-ийг амжилттай гүйцэтгэсэн    

Semalt! Манай програмыг үйлдвэрлэлийн орчинд байрлуулахын тулд одоо ажиллуулж болно:

     ng build - aot - хүрээлэн буй орчны бүтээгдэхүүн    

гээд өөрийн гаргасан сервер дээр үүсгэгдсэн dist директорыг байршуулна. Энэ нь ямар сайхан юм бэ?

Энэ нийтлэлд бид маш их зүйлийг хамруулсан. Тиймээс сурч мэдсэн зүйлээ эргэн санацгаая.

Дүгнэлт

Эхний өгүүлэлд бид дараахь зүйлийг сурч мэдсэн:

  • Миний Todo програмыг Angular CLI
  • ашиглан эхлүүлээрэй
  • Тодо классыг үүсгэхийн тулд хүнийг
  • todo's
  • -ийг үүсгэх, шинэчлэх болон арилгахын тулд TodoDataService
    үйлчилгээг бий болгох.
  • Хэрэглэгчийн интерфэйсийг харуулах AppConnect бүрэлдэхүүн хэсгийг ашиглана
  • бидний програмыг GitHub хуудсанд байрлуулах

Хоёр дахь өгүүлэлд бид ихэнх бүтээлээ AppComponent нэмж хийсэн

  • a TodoListComponent нь todo's
  • a TodoListItemComponent нь нэг
  • a TodoListHeaderComponent шинэ шинэ загвар үүсгэх
  • a TodoListFooterComponent нь хичнээн тооны үлдсэнийг харуулах

Гурав дахь өгүүлэлд бид:

  • REST API арын backend үүсгэх
  • API URL-г орчны хувьсагч болгон хадгалах
  • REST API
  • -тэй холбоостой ApiService
  • шинэ ApiService ашиглан TodoDataService
  • асинхрон API дуудлага хийх AppComponent -ийг шинэчлэх
  • unit tests
  • ажиллаж байхдаа жинхэнэ HTTP дуудлагаас зайлсхийхийн тулд ApiMockService

Энэ дөрөв дэх өгүүллээр бид:

  • програм нь чиглүүлэлт хэрэгтэй байж болох
  • JavaScript чиглүүлэгч гэж юу вэ
  • Angular чиглүүлэгч гэж юу болох, хэрхэн ажилладаг, энэ нь танд юу хийж чадах вэ
  • Бидний програмын маршрутыг хэрхэн тохируулах, чиглүүлэх тохиргоо
  • DOM-и
March 1, 2018