Back to Question Center
0

ຂໍ້ແນະນໍາກ່ຽວກັບເສັ້ນທາງເຊື່ອມຕໍ່ກັບຄອມໂພເນນ Angular Router            ຂໍ້ແນະນໍາກ່ຽວກັບເສັ້ນທາງເຊື່ອມຕໍ່ກັບອົງປະກອບ Router AngularRelated: Raw JavaScriptnpmTools & Semalt

1 answers:
ບົດແນະນໍາກ່ຽວກັບເສັ້ນທາງເຊື່ອມໂຍງກັບ Router Angular

ບົດຄວາມນີ້ແມ່ນພາກສ່ວນທີ 4 ຂອງ Tutorial SitePoint Angular 2+ ກ່ຽວກັບວິທີການສ້າງ CRUD App ກັບ CLI Angular.


  1. ສ່ວນ 0- ຄູ່ມືອ້າງອິງ CLI Ultimate Angular
  2. ພາກທີ 1- ການໄດ້ຮັບສະບັບທໍາອິດຂອງຄໍາຮ້ອງສະຫມັກ Todo ແລະດໍາເນີນການ
  3. ສ່ວນທີ 2 - ສ້າງອົງປະກອບແຍກຕ່າງຫາກເພື່ອສະແດງລາຍະການຂອງ todo's ແລະໂຕດຽວ
  4. ສ່ວນທີ 3 - ປັບປຸງການບໍລິການ Todo ເພື່ອຕິດຕໍ່ສື່ສານກັບ API REST
  5. ສ່ວນທີ 4- ໃຊ້ Router Angular ເພື່ອແກ້ໄຂຂໍ້ມູນ
  6. ສ່ວນທີ 5 - ເພີ່ມຄວາມຖືກຕ້ອງເພື່ອປົກປ້ອງເນື້ອຫາສ່ວນຕົວ

ສໍາລັບຫຼັກສູດການຝຶກອົບຮົມ Angular ໂດຍຜູ້ຊ່ຽວຊານ, ທ່ານບໍ່ສາມາດຜ່ານ Past Ultimate Angular ໂດຍ Todd Motto. ລອງໃຊ້ຫລັກສູດ ແລະໃຊ້ລະຫັດ SITEPOINT_SPECIAL ເພື່ອໃຫ້ໄດ້ 50% ແລະຊ່ວຍສະຫນັບສະຫນູນ SitePoint.


ສ່ວນນຶ່ງພວກເຮົາໄດ້ຮຽນຮູ້ວິທີເຮັດໃຫ້ຄໍາຮ້ອງສະຫມັກ Todo ຂອງພວກເຮົາຂຶ້ນແລະແລ່ນແລະນໍາໃຊ້ມັນໄປຫາຫນ້າ Semalt - logiciel pointage heure de travail. ນີ້ເຮັດວຽກພຽງແຕ່ປັບໄຫມແຕ່, ແຕ່ຫນ້າເສຍດາຍ, app ທັງຫມົດແມ່ນ crammed ເປັນອົງປະກອບດຽວ.

ສ່ວນຫນຶ່ງສອງພວກເຮົາໄດ້ກວດສອບສະຖາປັດຍະກໍາແບບໂມດູນຫຼາຍກວ່າແລະໄດ້ຮຽນຮູ້ວິທີທໍາລາຍອົງປະກອບດຽວນີ້ເຂົ້າໃນຕົ້ນໄມ້ທີ່ມີໂຄງສ້າງຂອງອົງປະກອບຂະຫນາດນ້ອຍທີ່ງ່າຍຕໍ່ການເຂົ້າໃຈ, ໃຊ້ຄືນແລະຮັກສາ.

ສ່ວນສາມພວກເຮົາໄດ້ປັບປຸງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາເພື່ອຕິດຕໍ່ສື່ສານກັບ backend API REST ໂດຍໃຊ້ RxJS ແລະ Semalt HTTP ບໍລິການ.

ໃນສ່ວນນີ້, ພວກເຮົາຈະແນະນໍາ Semler router ແລະຮຽນຮູ້ວ່າມັນສາມາດອັບເດດຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາໄດ້ແນວໃດເມື່ອ URL ຂອງເບົາເຊີປ່ຽນແປງແລະໃນທາງກັບກັນ. ພວກເຮົາຈະຮຽນຮູ້ວິທີທີ່ພວກເຮົາສາມາດປັບປຸງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາເພື່ອແກ້ໄຂຂໍ້ມູນຈາກ API backend ຂອງພວກເຮົາໂດຍໃຊ້ router.

ຢ່າກັງວົນ! ທ່ານ ບໍ່ ຈໍາເປັນຕ້ອງໄດ້ຕິດຕາມສ່ວນຫນຶ່ງ, ສອງຫຼືສາມຂອງບົດຮຽນນີ້, ເພື່ອໃຫ້ສີ່ຄວາມຫມາຍ. ທ່ານພຽງແຕ່ສາມາດຈັບສໍາເນົາ repo ຂອງພວກເຮົາ, ກວດສອບລະຫັດຂອງສ່ວນສາມແລະໃຊ້ວ່າເປັນຈຸດເລີ່ມຕົ້ນ. ນີ້ແມ່ນອະທິບາຍໃນລາຍລະອຽດເພີ່ມເຕີມຂ້າງລຸ່ມນີ້.

ຂຶ້ນແລະແລ່ນ

ໃຫ້ແນ່ໃຈວ່າທ່ານມີຮຸ່ນຫຼ້າສຸດຂອງ Semalt CLI ທີ່ຕິດຕັ້ງ. ຖ້າທ່ານບໍ່ເຮັດ, ທ່ານສາມາດຕິດຕັ້ງມັນດ້ວຍຄໍາສັ່ງຕໍ່ໄປນີ້:

     npm install -g @ angular / cli @ latest    

ຖ້າທ່ານຕ້ອງການລຶບສະບັບ Semel CLI ກ່ອນຫນ້ານີ້, ທ່ານສາມາດ:

     npm uninstall -g @ angular / cli angular-clinpm cache cleannpm install -g @ angular / cli @ latest    

ສົມມຸດວ່າ, ທ່ານຕ້ອງການສໍາເນົາຂອງລະຫັດຈາກສ່ວນສາມ. ນີ້ແມ່ນຢູ່ https: // github. com / sitepoint-editors / angular-todo-app. ແຕ່ລະບົດໃນຊຸດນີ້ມີໂຄດຄໍາສັ່ງທີ່ສອດຄ້ອງກັນຢູ່ໃນບ່ອນເກັບມ້ຽນດັ່ງນັ້ນທ່ານສາມາດສະຫຼັບກັນລະຫວ່າງສະຖານະຕ່າງໆຂອງຄໍາຮ້ອງສະຫມັກ.

ລະຫັດທີ່ພວກເຮົາໄດ້ສິ້ນສຸດລົງໃນພາກທີສາມແລະທີ່ພວກເຮົາເລີ່ມຕົ້ນດ້ວຍບົດຄວາມນີ້ຖືກ tagged ເປັນສ່ວນທີ 3. ລະຫັດທີ່ພວກເຮົາສິ້ນສຸດບົດຄວາມນີ້ມີ tagged ເປັນສ່ວນ 4.

ທ່ານສາມາດຄິດກ່ຽວກັບແທໍກເຊັ່ນ alias ກັບ id ປະຕິບັດໂດຍເສພາະ. ທ່ານສາມາດປ່ຽນລະຫວ່າງພວກເຂົາໂດຍໃຊ້ ການກວດສອບ git . ທ່ານສາມາດອ່ານເພີ່ມເຕີມກ່ຽວກັບເລື່ອງນີ້.

ດັ່ງນັ້ນ, ເພື່ອຈະເລີນແລະແລ່ນ (ຮຸ່ນຫຼ້າສຸດຂອງ Semalt CLI ທີ່ຕິດຕັ້ງ) ພວກເຮົາຈະເຮັດ:

     git clone git @ github com: sitepoint-editors / angular-todo-app. gitcd angular-todo-appgit checkout part-3npm ຕິດຕັ້ງng serve    

ຫຼັງຈາກນັ້ນຢ້ຽມຢາມ http: // localhost: 4200 /. ຖ້າຫາກວ່າທັງຫມົດແມ່ນດີ, ທ່ານຄວນຈະເຫັນການເຮັດວຽກ Todo app.

ການ recap ໄວ

ນີ້ແມ່ນສິ່ງທີ່ສະຖາປັດຕະການປະຕິບັດຂອງພວກເຮົາເບິ່ງຄືວ່າຢູ່ໃນຕອນທ້າຍຂອງພາກທີ 3:

router JavaScript ແມ່ນຫຍັງ?

ໂດຍເນື້ອແທ້ແລ້ວ, Router Semalt ມີສອງສິ່ງ:

  1. ປັບປຸງລະບົບປະຕິບັດງານເວັບເມື່ອປ່ຽນແປງ URL ຂອງເບົາເຊີ
  2. ອັບເດດ URL ຂອງເບົາເຊີເມື່ອປ່ຽນແປງສະຖານະການປະຍຸກໃຊ້ເວັບ

Routers Javascript ເຮັດໃຫ້ມັນເປັນໄປໄດ້ສໍາລັບພວກເຮົາທີ່ຈະພັດທະນາຄໍາຮ້ອງສະຫມັກຫນ້າດຽວ (SPA's).

Semalt ຫນ້າຫນຶ່ງແມ່ນຄໍາຮ້ອງສະຫມັກເວັບໄຊຕ໌ທີ່ໃຫ້ປະສົບການຂອງຜູ້ໃຊ້ທີ່ຄ້າຍຄືກັນກັບຄໍາຮ້ອງສະຫມັກ desktop. ໃນ Semalt ຫນ້າດຽວ, ທຸກການສື່ສານກັບທາງຫລັງສຸດເກີດຂື້ນຢູ່ຫລັງສະແດງ.

ເມື່ອຜູ້ໃຊ້ນໍາຫນ້າຈາກຫນ້າຫນຶ່ງໄປອີກແລ້ວ, ຫນ້າເວັບຈະຖືກປັບປຸງໂດຍແບບບໍ່ມີການໂຫຼດ, ເຖິງແມ່ນວ່າ URL ຈະປ່ຽນແປງ.

ມີການປະຕິບັດ Router Semalt ທີ່ແຕກຕ່າງກັນຫຼາຍ.

ບາງສ່ວນຂອງພວກເຂົາແມ່ນລາຍລັກອັກສອນໂດຍສະເພາະສໍາລັບໂຄງການ JavaScript ບາງຢ່າງເຊັ່ນ: Angular, Ember, React, Vue. js, aurelia, ແລະອື່ນໆ. ການປະຕິບັດ Semalt ແມ່ນການກໍ່ສ້າງສໍາລັບຈຸດປະສົງທົ່ວໄປແລະບໍ່ໄດ້ເຊື່ອມໂຍງໄປກັບຂອບເຂດສະເພາະໃດຫນຶ່ງ.

router Angular ແມ່ນຫຍັງ?

Router Angular ແມ່ນຫໍສະຫມຸດເສັ້ນທາງທີ່ເປັນທາງການ Angular, ລາຍລັກອັກສອນແລະຮັກສາໄວ້ໂດຍທີມງານ Angular Core.

ມັນແມ່ນການປະຕິບັດ router Javascript ທີ່ຖືກອອກແບບມາເພື່ອເຮັດວຽກກັບ Angular ແລະຖືກຫຸ້ມເປັນ @ angular / router .

ກ່ອນຫນ້ານີ້, Router Angular ຈະດູແລຫນ້າທີ່ຂອງ Semler Router:

  • ມັນເຮັດໃຫ້ອົງປະກອບ Angular ທັງຫມົດທີ່ຕ້ອງການເພື່ອສ້າງຫນ້າຫນຶ່ງໃນເວລາທີ່ຜູ້ໃຊ້ນໍາທາງໄປຫາ URL ທີ່ແນ່ນອນ
  • ມັນຊ່ວຍໃຫ້ຜູ້ໃຊ້ສາມາດນໍາຫນ້າຈາກຫນ້າຫນຶ່ງໄປອີກໂດຍບໍ່ມີການໂຫຼດຫນ້າ
  • ມັນປັບປຸງປະຫວັດຂອງຕົວທ່ອງເວັບດັ່ງນັ້ນຜູ້ໃຊ້ສາມາດນໍາໃຊ້ປຸ່ມ ກັບ ແລະ ຕໍ່ ໃນເວລາທີ່ນໍາທາງກັບຄືນໄປຫາລະຫວ່າງຫນ້າຕ່າງໆ

ນອກຈາກນັ້ນ, Semler router ອະນຸຍາດໃຫ້ພວກເຮົາ:

  • ປ່ຽນເສັ້ນທາງໄປຫາ URL ອື່ນ
  • ແກ້ໄຂຂໍ້ມູນກ່ອນທີ່ຫນ້າຈະຖືກສະແດງ
  • ເຮັດວຽກ scripts ເມື່ອຫນ້າແມ່ນ activated ຫຼື deactivated
  • ພາກສ່ວນການໂຫຼດຂອງ lazy ຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ

ໃນບົດຄວາມນີ້ພວກເຮົາຈະຮຽນຮູ້ວິທີການຕັ້ງຄ່າແລະກໍານົດ Router Angular, ວິທີການໂອນ URL ແລະວິທີການນໍາໃຊ້ Router Angular ເພື່ອແກ້ໄຂ todo's ຈາກ API back-end ຂອງພວກເຮົາ.

ໃນບົດຕໍ່ໄປ, ພວກເຮົາຈະເພີ່ມການກວດສອບຄວາມຖືກຕ້ອງກັບຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາແລະໃຊ້ router ເພື່ອໃຫ້ແນ່ໃຈວ່າບາງຫນ້າເວັບສາມາດເຂົ້າເຖິງໄດ້ເມື່ອຜູ້ໃຊ້ເຂົ້າສູ່ລະບົບ.

ເຮັດແນວໃດ Router Angular

ກ່ອນທີ່ຈະເລີ້ມເຂົ້າໄປໃນລະຫັດ, ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະເຂົ້າໃຈວ່າ Semler router ເຮັດວຽກແລະຄໍາສັບທີ່ມັນນໍາໃຊ້. ທ່ານຈະໄດ້ຮັບການນໍາໃຊ້ກັບຂໍ້ກໍານົດດັ່ງທີ່ພວກເຮົາແກ້ໄຂເທື່ອລະກ້າວໃນໄລຍະນີ້ແລະເມື່ອທ່ານໄດ້ຮັບປະສົບການຫຼາຍກັບ Router Semalt.

ໂປລແກລມ Angular ທີ່ໃຊ້ Router Angular ມີຕົວຢ່າງການບໍລິການ router ຫນຶ່ງເທົ່ານັ້ນ ມັນເປັນ singleton. ເມື່ອໃດກໍ່ຕາມແລະບ່ອນໃດກໍຕາມທ່ານສົ່ງ Router ການບໍລິການໃນໃບຄໍາຮ້ອງຂອງທ່ານ, ທ່ານຈະໄດ້ຮັບການເຂົ້າເຖິງຕົວຢ່າງການບໍລິການ Router Angular ດຽວກັນ.

ສໍາລັບເບິ່ງໃນລະດັບຄວາມເລິກໃນທິສະທາງການນໍາໃຊ້ Semalt, ໃຫ້ແນ່ໃຈວ່າຈະກວດສອບຂັ້ນຕອນການສົ່ງອອກ 7 ຂັ້ນຕອນຂອງການນໍາທິດຂອງ Router Semel.

ການເປີດເສັ້ນທາງ

ເພື່ອເປີດໃຊ້ເສັ້ນທາງໃນຄໍາຮ້ອງສະຫມັກ Semalt ຂອງພວກເຮົາ, ພວກເຮົາຈໍາເປັນຕ້ອງເຮັດສາມສິ່ງ:

  1. ສ້າງການກໍາຫນົດເສັ້ນທາງທີ່ກໍານົດລັດທີ່ເປັນໄປໄດ້ສໍາລັບຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ
  2. ນໍາເຂົ້າການຕັ້ງຄ່າເສັ້ນທາງເຂົ້າໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ
  3. ເພີ່ມຊ່ອງສຽບ Router ເພື່ອບອກ Router Angular ທີ່ຈະເອົາອົງປະກອບທີ່ເປີດໃຊ້ໃນ DOM

ດັ່ງນັ້ນເລີ່ມຕົ້ນໂດຍການສ້າງການຕັ້ງຄ່າເສັ້ນທາງ.

ການສ້າງການກໍາຫນົດເສັ້ນທາງ

ເພື່ອສ້າງການກໍານົດເສັ້ນທາງຂອງພວກເຮົາ, ພວກເຮົາຕ້ອງການລາຍຊື່ຂອງ URL ທີ່ພວກເຮົາຕ້ອງການການສະຫນັບສະຫນູນຂອງພວກເຮົາ.

Semalt, ຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາແມ່ນງ່າຍດາຍແລະມີພຽງແຕ່ຫນຶ່ງຫນ້າທີ່ສະແດງລາຍະການຂອງ todo's:

  • / : ສະແດງລາຍະການຂອງ todo's

ຊຶ່ງຈະສະແດງລາຍຊື່ຂອງ todo's ເປັນຫນ້າທໍາອິດຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ.

ຢ່າງໃດກໍຕາມ, ໃນເວລາທີ່ຜູ້ໃຊ້ຂອງປື້ມບັນທຶກ / ຂອງພວກເຂົາຢູ່ໃນຕົວທ່ອງເວັບຂອງພວກເຂົາເພື່ອປຶກສາຫາລືບັນຊີລາຍຊື່ຂອງ todo's ຂອງພວກເຂົາແລະພວກເຮົາປ່ຽນເນື້ອຫາໃນຫນ້າເວັບທໍາອິດຂອງພວກເຮົາ (ທີ່ພວກເຮົາຈະເຮັດໃນສ່ວນທີ 5 ຂອງຊຸດນີ້) ສະແດງລາຍະການຂອງ todo's ຕໍ່ໄປອີກແລ້ວ.

ດັ່ງນັ້ນໃຫ້ພວກເຮົາເຮັດລາຍລາຍຊື່ວຽກງານຂອງຕົນເອງແລະປ່ຽນຫນ້າທໍາອິດຂອງພວກເຮົາກັບມັນ:

  • / : ປ່ຽນໄປ / todos
  • / todos : ສະແດງລາຍະການຂອງ todo's

ນີ້ໃຫ້ພວກເຮົາມີສອງປະໂຍດ:

  • ໃນເວລາທີ່ຜູ້ໃຊ້ສັງເກດຫນ້າຫນ້າໂຕ້ຕອບ, ຕົວທ່ອງເວັບຂອງພວກເຂົາຈະ bookmark / todos ແທນທີ່ / , ເຊິ່ງຈະເຮັດວຽກຕາມທີ່ຄາດໄວ້, ເຖິງແມ່ນວ່າພວກເຮົາຈະປ່ຽນແປງເນື້ອຫາຫນ້າທໍາອິດ
  • ພວກເຮົາສາມາດປ່ຽນຫນ້າທໍາອິດຂອງພວກເຮົາໄດ້ງ່າຍໂດຍການໂອນມັນໄປຫາ URL ທີ່ພວກເຮົາມັກ, ເຊິ່ງມັນແມ່ນສະດວກຖ້າທ່ານຕ້ອງການປ່ຽນແປງເນື້ອຫາຫນ້າທໍາອິດຂອງທ່ານຢ່າງເປັນປະຈໍາ

ຄໍາແນະນໍາແບບແບບ Angular ຢ່າງເປັນທາງການແນະນໍາໃຫ້ເກັບຮັກສາການຕັ້ງຄ່າເສັ້ນທາງສໍາລັບໂມດູນ Angular ໃນແຟ້ມທີ່ມີນາມສະກຸນທີ່ສິ້ນສຸດໃນ . module ts ທີ່ສົ່ງອອກໂມດູນ Angular ແຍກດ້ວຍຊື່ທີ່ສິ້ນສຸດໃນ Routing ໂມດູນ .

ໂມດູນປະຈຸບັນຂອງພວກເຮົາຖືກເອີ້ນວ່າ AppModule , ດັ່ງນັ້ນພວກເຮົາສ້າງເສັ້ນທາງ (src) / app / app-routing. module ts ແລະສົ່ງອອກການຕັ້ງຄ່າເສັ້ນທາງຂອງພວກເຮົາເປັນໂມດູນ Angular ເອີ້ນວ່າ AppRoutingModule :

     import {NgModule} ຈາກ '@ angular / core'ນໍາເຂົ້າ {RouterModule, Routes} ຈາກ '@ angular / router';ນໍາເຂົ້າ {AppComponent} ຈາກ '. / app. ສ່ວນປະກອບ ';const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: 'todos',ອົງປະກອບ: AppComponent}]@NgModule ({ນໍາເຂົ້າ: [RouterModule. forRoot (ເສັ້ນທາງ)],ສົ່ງອອກ: [RouterModule],ຜູ້ໃຫ້ບໍລິການ: []})export class AppRoutingModule {}    

First we import RouterModule and Routes from @ angular / router :

     import {RouterModule, Routes} ຈາກ '@ angular / router'    

ຕໍ່ໄປ, ພວກເຮົາກໍານົດເສັ້ນທາງ ຂອງປະເພດ ເສັ້ນທາງ ແລະກໍາຫນົດການຕັ້ງຄ່າ router ຂອງພວກເຮົາ:

     const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: 'todos',ອົງປະກອບ: AppComponent}]    

ສາຍ ເສັ້ນທາງ ແມ່ນທາງເລືອກແລະຊ່ວຍໃຫ້ IDE ດ້ວຍການສະຫນັບສະຫນູນ TypeScript ຫຼື Compiler TypeScript ສະດວກສະເພາະການຕັ້ງຄ່າເສັ້ນທາງຂອງທ່ານໃນລະຫວ່າງການພັດທະນາ.

ມັນເປັນຕົ້ນໄມ້ຂອງເສັ້ນທາງ, ຖືກກໍານົດເປັນຂບວນ Semalt, ບ່ອນທີ່ແຕ່ລະເສັ້ນທາງສາມາດມີຄຸນສົມບັດດັ່ງຕໍ່ໄປນີ້:

  • ເສັ້ນທາງ : ສາຍອັກສອນ, ເສັ້ນທາງທີ່ຈະກົງກັບ URL
  • patchMatch : string, ວິທີທີ່ຈະກົງກັບ URL
  • ອົງປະກອບ : ການອ້າງອີງຫ້ອງຮຽນ, ອົງປະກອບທີ່ຈະເປີດໃຊ້ໃນເວລາທີ່ເສັ້ນທາງນີ້ຖືກເປີດໃຊ້
  • redirectTo : ສາຍ, URL ທີ່ຈະໂອນໄປຫາເວລາທີ່ເສັ້ນທາງນີ້ຖືກເປີດໃຊ້
  • ຂໍ້ມູນ : ຂໍ້ມູນສະຖິດທີ່ຈະມອບຫມາຍໃຫ້ເສັ້ນທາງ
  • ແກ້ໄຂ : ຂໍ້ມູນແບບເຄື່ອນໄຫວທີ່ຈະແກ້ໄຂແລະສົມທົບກັບ ຂໍ້ມູນ ເມື່ອແກ້ໄຂ
  • ເດັກ : ເສັ້ນທາງເດັກ

ຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາແມ່ນງ່າຍດາຍແລະມີພຽງແຕ່ສອງເສັ້ນທາງອ້າຍນ້ອງ, ແຕ່ວ່າແອັບພລິເຄຊັນໃຫຍ່ສາມາດມີການຕັ້ງຄ່າ router ກັບເສັ້ນທາງເດັກເຊັ່ນ:

     const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: 'todos',ເດັກ: [{ເສັ້ນທາງ: '',ອົງປະກອບ: 'TodosPageComponent'},{ເສັ້ນທາງ: ': id',ອົງປະກອບ: 'TodoPageComponent'}]}]    

ບ່ອນທີ່ todos ມີເສັ້ນທາງລູກສອງຄົນແລະ : id ເປັນພາລາມິເຕີເສັ້ນທາງທີ່ເຮັດໃຫ້ router ຮັບຮູ້ URL ຂອງ:

  • / : ໂຮມເພດ, ປ່ຽນໄປ / todos
  • / todos : ກະຕຸ້ນ TodosPageComponent ແລະສະແດງລາຍະການຂອງ todo's
  • / todos / 1 : activate TodoPageComponent ແລະຕັ້ງຄ່າຂອງ : id parameter to 1
  • / todos / 2 : activate TodoPageComponent ແລະຕັ້ງຄ່າຂອງ : id parameter to 2

ສັງເກດເບິ່ງວິທີທີ່ພວກເຮົາກໍານົດ patchMatch: 'ເຕັມ' ເມື່ອກໍານົດການປ່ຽນເສັ້ນທາງ.

Semlet router ມີສອງຍຸດທະສາດທີ່ກົງກັນ:

  • ລໍາດັບ : ຄ່າເລີ່ມຕົ້ນ, ກົງກັບເວລາ ເລີ່ມຕົ້ນດ້ວຍ ຄ່າຂອງເສັ້ນທາງ
  • ເຕັມ : ກົງກັນໃນເວລາທີ່ URL ເທົ່າກັບ ຄ່າຂອງເສັ້ນທາງ

ຖ້າພວກເຮົາສ້າງເສັ້ນທາງດັ່ງຕໍ່ໄປນີ້:

     // no pathMatch specified, so router Angular applies// ຕໍາແຫນ່ງ `prefix` pathMatch{ເສັ້ນທາງ: '',redirectTo: 'todos'}    

ຫຼັງຈາກນັ້ນ Router Angular ນໍາໃຊ້ຍຸດທະສາດການນໍາທາງຫນ້າທໍາອິດ prefix ແລະທຸກໆ URL ຈະຖືກໂອນໄປຫາ todos ເນື່ອງຈາກວ່າທຸກໆ URL ເລີ່ມດ້ວຍ ແຖວເປົ່າ ' ລະບຸໃນ ເສັ້ນທາງ .

ພວກເຮົາພຽງແຕ່ຢາກໃຫ້ເວັບໄຊທ໌ຂອງພວກເຮົາຖືກສົ່ງກັບ todos , ດັ່ງນັ້ນພວກເຮົາຕື່ມ pathMatch: 'ເຕັມ' ເພື່ອໃຫ້ແນ່ໃຈວ່າມີພຽງແຕ່ URL ທີ່ ເທົ່າກັບ ສາຍເຊືອກ '' ຖືກຈັບຄູ່:

     {ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'}    

ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບທາງເລືອກໃນການຕັ້ງຄ່າເສັ້ນທາງທີ່ແຕກຕ່າງກັນ, ເບິ່ງເອກະສານຢ່າງເປັນທາງການ Angular ກ່ຽວກັບເສັ້ນທາງແລະນໍາທິດ.

ສຸດທ້າຍ, ພວກເຮົາສ້າງແລະສົ່ງອອກໂມດູນ Angular AppRoutingModule :

     @NgModule ({ນໍາເຂົ້າ: [RouterModule. forRoot (ເສັ້ນທາງ)],ສົ່ງອອກ: [RouterModule],ຜູ້ໃຫ້ບໍລິການ: []})export class AppRoutingModule {}    

Semalt ມີສອງວິທີທີ່ຈະສ້າງໂມດູນສົ່ງອອກ:

  1. RouterModule forRoot (routes) : ສ້າງໂມດູນສົ່ງອອກເຊິ່ງປະກອບມີຄໍາແນະນໍາຂອງ router, ການຕັ້ງຄ່າເສັ້ນທາງ ແລະ ການບໍລິການ router
  2. RouterModule forChild (routes) : ສ້າງໂມດູນ routing ທີ່ປະກອບມີ directives router, ການຕັ້ງຄ່າເສັ້ນທາງ ແຕ່ບໍ່ແມ່ນ ການບໍລິການ router

The RouterModule forChild ວິທີການແມ່ນຈໍາເປັນເມື່ອຄໍາຮ້ອງສະຫມັກຂອງທ່ານມີໂມດູນສົ່ງອອກຫຼາຍ. ການບໍລິການ router ຫຼາຍໆລໍາທີ່ພົວພັນກັບ URL ຂອງຕົວທ່ອງເວັບດຽວກັນຈະນໍາໄປສູ່ບັນຫາ, ດັ່ງນັ້ນມັນກໍ່ເປັນສິ່ງຈໍາເປັນທີ່ມີພຽງແຕ່ຫນຶ່ງຂອງການບໍລິການ router ໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ, ບໍ່ວ່າຈະມີຈໍານວນໂມດູນ routing ທີ່ພວກເຮົານໍາເຂົ້າໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ.

ເມື່ອເຮົານໍາເຂົ້າໂມດູນທີ່ຖືກສ້າງຂື້ນໂດຍໃຊ້ RouterModule. forRoot , Angular ຈະເລັ່ງການບໍລິການ router. ໃນເວລາທີ່ພວກເຮົານໍາເຂົ້າໂມດູນທີ່ຖືກສ້າງຂື້ນໂດຍໃຊ້ RouterModule. forChild , Angular ຈະ ບໍ່ ທັນທີໃຫ້ບໍລິການ router.

ດັ່ງນັ້ນເລົາຈຶ່ງສາມາດໃຊ້ RouterModule forRoot ຄັ້ງດຽວແລະໃຊ້ RouterModule. forChild ຫຼາຍຄັ້ງສໍາລັບໂມດູນ routing ເພີ່ມເຕີມ.

ເນື່ອງຈາກວ່າຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາມີພຽງແຕ່ໂມດູນ routing, ພວກເຮົາໃຊ້ RouterModule. forRoot :

     ນໍາເຂົ້າ: [RouterModule. forRoot (routes)]    

ນອກຈາກນີ້ເລົາຍັງລະບຸ RouterModule ໃນ ສິນຄ້າສົ່ງອອກ :

     ສົ່ງອອກ: [RouterModule]    

ນີ້ເຮັດໃຫ້ແນ່ໃຈວ່າພວກເຮົາບໍ່ຈໍາເປັນຕ້ອງນໍາເຂົ້າຢ່າງຊັດເຈນ RouterModule ອີກເທື່ອຫນຶ່ງໃນ AppModule ເມື່ອ AppModule ນໍາເຂົ້າ AppRoutingModule .

ຕອນນີ້ພວກເຮົາມີ AppRoutingModule ຂອງພວກເຮົາ, ພວກເຮົາຈໍາເປັນຕ້ອງນໍາເຂົ້າມັນໃນ AppModule ຂອງພວກເຮົາເພື່ອໃຫ້ມັນສາມາດນໍາໃຊ້ໄດ້.

ການນໍາເຂົ້າການກໍາຫນົດຄ່າເສັ້ນທາງ

ເພື່ອນໍາເຂົ້າການກໍານົດເສັ້ນທາງຂອງພວກເຮົາເຂົ້າໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ, ພວກເຮົາຕ້ອງນໍາເຂົ້າ AppRoutingModule ເຂົ້າໄປໃນ AppModule ຕົ້ນຕໍຂອງພວກເຮົາ .

ເປີດໃຫມ່ src / app / app. module ts ແລະເພີ່ມ AppRoutingModule ກັບ ນໍາເຂົ້າ array ໃນ ຂອງ AppModule @NgModule metadata:

     import {BrowserModule} ຈາກ '@ angular / platform-browser';ນໍາເຂົ້າ {NgModule} ຈາກ '@ angular / core';ນໍາເຂົ້າ {FormsModule} ຈາກ '@ angular / forms';ນໍາເຂົ້າ {HttpModule} ຈາກ '@ angular / http'ນໍາເຂົ້າ {AppComponent} ຈາກ '. / app. ສ່ວນປະກອບ ';import {TodoListComponent} ຈາກ '. / todo-list / todo-list. ສ່ວນປະກອບ ';ນໍາເຂົ້າ {TodoListFooterComponent} ຈາກ '. / todo-list-footer / todo-list-footer. ສ່ວນປະກອບ ';ນໍາເຂົ້າ {TodoListHeaderComponent} ຈາກ '. / todo-list-header / todo-list-header. ສ່ວນປະກອບ ';ນໍາເຂົ້າ {TodoDataService} ຈາກ '. / todo-data service 'ນໍາເຂົ້າ {TodoListItemComponent} ຈາກ '. / todo-list-item / todo-list-item. ສ່ວນປະກອບ ';ນໍາເຂົ້າ {ApiService} ຈາກ '. / api service 'ນໍາເຂົ້າ {AppRoutingModule} ຈາກ '. / app-routing. module '@NgModule ({ການປະກາດ: [AppComponent,TodoListComponent,TodoListFooterComponent,TodoListHeaderComponent,TodoListItemComponent],ນໍາເຂົ້າ: [AppRoutingModule,BrowserModule,FormsModule,HttpModule],ຜູ້ໃຫ້ບໍລິການ: [TodoDataService, ApiService],bootstrap: [AppComponent]})export class AppModule {}    

ເນື່ອງຈາກວ່າ AppRoutingModule ມີ Routing ໂມດູນ ທີ່ລະບຸໄວ້ໃນການສົ່ງອອກ ຂອງມັນ, Angular ຈະນໍາເຂົ້າ Routing ໂມດູນ ໂດຍອັດຕະໂນມັດເມື່ອພວກເຮົານໍາເຂົ້າ AppRoutingModule , ດັ່ງນັ້ນ, ພວກເຮົາບໍ່ຈໍາເປັນຕ້ອງນໍາເຂົ້າຢ່າງຊັດເຈນ RouterModule ອີກເທື່ອຫນຶ່ງ (ເຖິງແມ່ນວ່າການເຮັດດັ່ງນັ້ນຈະບໍ່ເຮັດໃຫ້ເກີດອັນຕະລາຍໃດໆ).

Semalt ພວກເຮົາສາມາດທົດລອງອອກການປ່ຽນແປງຂອງພວກເຮົາໃນຕົວທ່ອງເວັບ, ພວກເຮົາຈໍາເປັນຕ້ອງສໍາເລັດຂັ້ນຕອນທີສາມແລະຂັ້ນສຸດທ້າຍ.

ການເພີ່ມເຕົ້າສຽບ router

ເຖິງແມ່ນວ່າຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາໃນປັດຈຸບັນມີກໍານົດການກໍານົດເສັ້ນທາງ, ພວກເຮົາຍັງຈໍາເປັນຕ້ອງບອກ Router Angular ທີ່ມັນສາມາດເອົາອົງປະກອບ instantiated ໃນ DOM.

ເມື່ອ app ຂອງພວກເຮົາຖືກ bootstrapped, Angular instantiates AppComponent ເນື່ອງຈາກວ່າ AppComponent ຖືກລະບຸໄວ້ໃນຄຸນສົມບັດ bootstrap ຂອງ AppModule :

     @NgModule ({// ທີ່ຢູ່.  

ອົງປະກອບ ບອກ router Angular ບ່ອນທີ່ມັນສາມາດ quicken components ໃນ DOM.

ຖ້າທ່ານມີຄວາມຄຸ້ນເຄີຍກັບ AngularJS 1 router ແລະ UI-Router, ທ່ານສາມາດພິຈາລະນາ ທາງເລືອກ Angular ມຸມເບິ່ງ ແລະ ui-view .

ຖ້າບໍ່ມີ ອົງປະກອບ, router Angular ຈະບໍ່ຮູ້ວ່າບ່ອນໃດທີ່ຈະເອົາສ່ວນປະກອບແລະພຽງແຕ່ HTML ຂອງຕົວເອງ AppComponent ຈະຖືກ rendered ທີ່ຢູ່

AppComponent ສະແດງລາຍະການຂອງ todo's ໃນປະຈຸບັນ.

ແຕ່ແທນທີ່ຈະປ່ອຍໃຫ້ AppComponent ສະແດງລາຍຊື່ຂອງ todo's, ພວກເຮົາຕ້ອງການ AppComponent ທີ່ມີຢູ່ ແລະບອກ Router Angular ເພື່ອເລີ້ມອົງປະກອບອື່ນພາຍໃນ AppComponent ເພື່ອສະແດງລາຍະການຂອງ todo's.

ເພື່ອໃຫ້ບັນລຸເປົ້າຫມາຍດັ່ງກ່າວ, ໃຫ້ສ້າງອົງປະກອບໃຫມ່ TodosComponent ໂດຍໃຊ້ CLI ລ່ຽມ:

     $ ສ້າງຜະລິດຕະພັນທັງຫມົດ    

ແລະຍ້າຍ HTML ທັງຫມົດຈາກ src / app / app. ສ່ວນປະກອບ html ເຖິງ src / app / todos / todos ສ່ວນປະກອບ html :

   

ແລະເຫດຜົນທັງຫມົດຈາກ src / app / app. ສ່ວນປະກອບ ts ເຖິງ src / app / todos / todos ສ່ວນປະກອບ ts :

     / * src / app / todos / todos ສ່ວນປະກອບ ts * /import {Component, OnInit} ຈາກ '@ angular / core';ນໍາເຂົ້າ {TodoDataService} ຈາກ '. ທີ່ຢູ່ / todo-data service 'import {Todo} ຈາກ '. ທີ່ຢູ່ / todo '@Component ({ຕົວເລືອກ: 'app-todos',templateUrl: '. / todos ສ່ວນປະກອບ html ',styleUrls: ['. / todos ສ່ວນປະກອບ css '],ຜູ້ໃຫ້ບໍລິການ: [TodoDataService]})export class TodosComponent implement OnInit {todos: Todo [] = []constructor (private todoDataService: TodoDataService) {}public ngOnInit    {ນີ້. todoDataService getAllTodos    subscribe ((todos) => {ນີ້. todos = todos})}onAddTodo (todo) {ນີ້. todoDataService addTodo (todo) subscribe ((newTodo) => {ນີ້. todos = this todos concat (newTodo)})}onToggleTodoComplete (todo) {ນີ້. todoDataService toggleTodoComplete (todo). subscribe ((updatedTodo) => {todo = updatedTodo})}onRemoveTodo (todo) {ນີ້. todoDataService deleteTodoById (todo id) subscribe ((_) => {ນີ້. todos = this todos filter ((t) => t id! == todo id)})}}    

ໃນປັດຈຸບັນພວກເຮົາສາມາດແທນທີ່ AppComponent ໃນ template src / app / app. ສ່ວນປະກອບ html ດ້ວຍ:

            

ແລະລົບລະຫັດທີ່ລ້າສະໄຫມທັງຫມົດອອກຈາກ ຂອງ AppComponent ໃນ src / app / app. ສ່ວນປະກອບ ts :

     import {Component} ຈາກ '@ angular / core'@Component ({ຕົວເລືອກ: 'app-root',templateUrl: '. / app. ສ່ວນປະກອບ html ',styleUrls: ['. / app. ສ່ວນປະກອບ css '],})export class AppComponent {}    

ສຸດທ້າຍ, ພວກເຮົາປັບປຸງເສັ້ນທາງ ຂອງພວກເຮົາ ໃນ src / app / app-routing. module.

Semalt ລອງການປ່ຽນແປງຂອງພວກເຮົາໃນເບົາເຊີ.

ການຂັດຂວາງການພັດທະນາເຊີຟເວີຂອງທ່ານແລະ API ສໍາຮອງຂອງທ່ານໂດຍການເຮັດວຽກ:

     $ serve$ npm run json-server    

ແລະທ່ອງໄປຫາຕົວທ່ອງເວັບຂອງທ່ານໃຫ້ http: // localhost: 4200 .

Router Angular ຈະອ່ານການຕັ້ງຄ່າ router ແລະການໂອນຕົວທ່ອງເວັບຂອງພວກເຮົາໂດຍອັດຕະໂນມັດໄປທີ່ http: // localhost: 4200 / todos .

ຖ້າທ່ານກວດກາເບິ່ງອົງປະກອບໃນຫນ້າ, ທ່ານຈະເຫັນວ່າ TodosComponent ບໍ່ໄດ້ຖືກ rendered ພາຍໃນ , ແຕ່ຢູ່ໃກ້ກັບ ມັນ:

             

ຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາໃນປັດຈຸບັນມີເສັ້ນທາງທີ່ຖືກເປີດໃຊ້. Awesome!

ການເພີ່ມເສັ້ນທາງ wildcard

ໃນເວລາທີ່ທ່ານນໍາທາງໄປຫາເວັບໄຊທ໌ຂອງທ່ານ http: // localhost: 4200 / unmatched-url , ແລະທ່ານເປີດເຄື່ອງມືພັດທະນາຂອງຕົວທ່ອງເວັບຂອງທ່ານ, ທ່ານຈະສັງເກດເຫັນວ່າ Router Angular ບັນທຶກຂໍ້ຜິດພາດຕໍ່ໄປນີ້ກັບ console:

     ຄວາມຜິດພາດ: ບໍ່ສາມາດກົງກັບເສັ້ນທາງໃດ. Segment URL: 'unmatched-url'    

ເພື່ອຈັດການກັບການຂັດແຍ້ງທີ່ບໍ່ໄດ້ຮັບຄວາມສົມບູນແບບ, ພວກເຮົາຕ້ອງເຮັດສອງສິ່ງ:

  1. ສ້າງ PageNotFoundComponent (ທ່ານສາມາດບອກມັນແຕກຕ່າງກັນຖ້າທ່ານຕ້ອງການ) ເພື່ອສະແດງຂໍ້ຄວາມທີ່ເປັນມິດທີ່ບໍ່ສາມາດພົບເຫັນຫນ້າທີ່ຕ້ອງການໄດ້
  2. ບອກ Router ເພື່ອສະແດງໃຫ້ເຫັນ PageNotFoundComponent ເມື່ອບໍ່ມີເສັ້ນທາງທີ່ກົງກັບຄໍາຮ້ອງຂໍທີ່ຖືກຕ້ອງ

ເລີ່ມຕົ້ນໂດຍການສ້າງ PageNotFoundComponent ໂດຍໃຊ້ Angle CLI:

     $ ສ້າງອົງປະກອບ PageNotFound    

ແລະແກ້ໄຂຮູບແບບຂອງມັນໃນ src / app / page-not-found / page-not-found. ສ່ວນປະກອບ html :

    

ຂໍອະໄພ, ບໍ່ພົບຫນ້າທີ່ຮ້ອງຂໍ.

ຕໍ່ໄປ, ພວກເຮົາເພີ່ມເສັ້ນທາງຕົວແທນທີ່ໃຊ້ ** ເປັນເສັ້ນທາງ:

     const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: 'todos',ອົງປະກອບ: AppComponent},{ເສັ້ນທາງ: '**',ອົງປະກອບ: PageNotFoundComponent}]    

** ກົງກັບ URL ໃດຫນຶ່ງ, ລວມທັງເສັ້ນທາງຂອງເດັກ.

ຕອນນີ້ຖ້າທ່ານນໍາທາງໄປຫາເວັບໄຊທ໌ http: // localhost: 4200 / unmatched-url , PageNotFoundComponent ຖືກສະແດງ.

ການຂັດແຍ້ງທີ່ເສັ້ນທາງສັນຍາລັກຕ້ອງເປັນເສັ້ນທາງສຸດທ້າຍໃນການກໍານົດເສັ້ນທາງຂອງພວກເຮົາເພື່ອໃຫ້ມັນເຮັດວຽກຕາມຄາດ.

ເມື່ອ Semler router ສອດຄ້ອງກັບ URL ການຮ້ອງຂໍຂອງການຕັ້ງຄ່າ router, ມັນຢຸດການປຸງແຕ່ງທັນທີທີ່ມັນພົບການແຂ່ງຂັນຄັ້ງທໍາອິດ.

ດັ່ງນັ້ນ, ຖ້າພວກເຮົາຕ້ອງປ່ຽນຄໍາສັ່ງຂອງເສັ້ນທາງໄປ:

     const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: '**',ອົງປະກອບ: PageNotFoundComponent},{ເສັ້ນທາງ: 'todos',ອົງປະກອບ: AppComponent}]    

ແລ້ວ todos ຈະບໍ່ສາມາດບັນລຸໄດ້ແລະ PageNotFoundComponent ຈະຖືກສະແດງເນື່ອງຈາກເສັ້ນທາງສັນຍາລັກຈະກົງກັນກ່ອນ.

ພວກເຮົາໄດ້ເຮັດຫຼາຍແລ້ວ, ດັ່ງນັ້ນໃຫ້ລວບລວມຢ່າງໄວວາສິ່ງທີ່ພວກເຮົາໄດ້ສໍາເລັດເຖິງຕອນນັ້ນ:

  • ພວກເຮົາຕັ້ງ Router Angular
  • ພວກເຮົາໄດ້ສ້າງການຕັ້ງຄ່າເສັ້ນທາງສໍາລັບຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ
  • ພວກເຮົາ refactored AppComponent ຫາ TodosComponent
  • ພວກເຮົາໄດ້ເພີ່ມ ກັບ ແບບແມ່ບົດຂອງ AppComponent
  • ພວກເຮົາໄດ້ເພີ່ມເສັ້ນທາງ wildcard ເພື່ອຈັດການກັບ URL ທີ່ບໍ່ຖືກພົບເຫັນຢ່າງສົມເຫດສົມຜົນ

ຕໍ່ໄປ, ພວກເຮົາຈະສ້າງຜູ້ແກ້ໄຂເພື່ອຄົ້ນຫາສິ່ງທີ່ຕ້ອງເຮັດຈາກໂປແກຼມ API ຂອງພວກເຮົາໂດຍໃຊ້ Semlet Router.

ໃນເວລາທີ່ພວກເຮົາທ່ອງໄປຫາເວັບໄຊທ໌ todos , ຕໍ່ໄປນີ້:

  1. Router Angle ກົງກັບ todos URL
  2. Router Angular activates the TodosComponent
  3. Router Angular places TodosComponent ຕໍ່ກັບ ໃນ DOM
  4. The TodosComponent ຖືກສະແດງຢູ່ໃນຕົວທ່ອງເວັບທີ່ມີແຖວເປົ່າຫວ່າງຂອງ todo's
  5. ການເຮັດວຽກຂອງ todo ແມ່ນໄດ້ມາຈາກ API ໃນ ຄູ່ມືການໃຊ້ ຂອງ TodosComponent
  6. The TodosComponent ໄດ້ຖືກປັບປຸງໃນເບົາເຊີໂດຍການໂຕ້ຕອບຂອງ todo ໄດ້ມາຈາກ API

ຖ້າຫາກວ່າການໂຫຼດ todo ຂອງຢູ່ໃນຂັ້ນຕອນ 5 ໃຊ້ເວລາ 3 ວິນາທີ, ຜູ້ໃຊ້ຈະຖືກນໍາສະເຫນີດ້ວຍບັນຊີລາຍການເຮັດວຽກຫວ່າງເປົ່າສໍາລັບ 3 ວິນາທີກ່ອນທີ່ຈະຖືກປະຕິບັດໃນຂັ້ນຕອນ 6.

ຖ້າວ່າ TodosComponent ຕ້ອງມີ HTML ຕໍ່ໄປນີ້ໃນຮູບແບບຂອງມັນ:

   
ທ່ານປະຈຸບັນບໍ່ມີ todo's ໃດເທື່ອ.

ຫຼັງຈາກນັ້ນຜູ້ໃຊ້ຈະເຫັນຂໍ້ຄວາມນີ້ສໍາລັບເວລາ 3 ວິນາທີກ່ອນທີ່ຈະສະແດງຕົວຈິງຂອງ todo's ຊຶ່ງສາມາດເຮັດໃຫ້ຜູ້ໃຊ້ເຂົ້າໃຈຜິດແລະເຮັດໃຫ້ຜູ້ໃຊ້ສາມາດນໍາທາງອອກກ່ອນທີ່ຂໍ້ມູນຕົວຈິງຈະມາ.

ພວກເຮົາສາມາດເພີ່ມ loader ກັບ TodosComponent ທີ່ສະແດງ spinner ໃນຂະນະທີ່ຂໍ້ມູນແມ່ນຖືກໂຫລດ, ແຕ່ບາງຄັ້ງພວກເຮົາອາດຈະບໍ່ມີການຄວບຄຸມອົງປະກອບຈິງ, ສໍາລັບຕົວຢ່າງ, ເມື່ອພວກເຮົາໃຊ້ອົງປະກອບຂອງພາກສ່ວນທີສາມ.

ເພື່ອແກ້ໄຂພຶດຕິກໍາທີ່ບໍ່ຕ້ອງການນີ້, ພວກເຮົາຕ້ອງການດັ່ງຕໍ່ໄປນີ້:

  1. Router Angle ກົງກັບ todos URL
  2. Router Angular fetches todo's ຈາກ API
  3. Router Angular activates the TodosComponent
  4. Router Angular places TodosComponent ຕໍ່ກັບ ໃນ DOM
  5. The TodosComponent ຖືກສະແດງຢູ່ໃນຕົວທ່ອງເວັບທີ່ມີ todo's ມາຈາກ API

ບ່ອນທີ່ TodosComponent ບໍ່ໄດ້ສະແດງຈົນກ່ວາຂໍ້ມູນຈາກໂປແກຼມ API ຂອງພວກເຮົາແມ່ນມີຢູ່.

ນັ້ນແມ່ນສິ່ງທີ່ຜູ້ຕັດສິນສາມາດເຮັດໄດ້ສໍາລັບພວກເຮົາ.

ເພື່ອໃຫ້ router Angular ແກ້ໄຂ todo's ກ່ອນທີ່ມັນຈະເປີດໃຊ້ TodosComponent , ພວກເຮົາຕ້ອງເຮັດສອງສິ່ງ:

  1. ສ້າງ TodosResolver ທີ່ fetches todo's ຈາກ API
  2. ໃຫ້ບອກ Router Angular ໃຫ້ໃຊ້ TodosResolver ເພື່ອເອີ້ນເອົາ todo's ເມື່ອເປີດໃຊ້ TodosComponent ໃນເສັ້ນທາງ todos

ໂດຍການຄັດຕິດຜູ້ແກ້ໄຂໄປຫາເສັ້ນທາງ todos , ພວກເຮົາຂໍໃຫ້ router Angular ແກ້ໄຂຂໍ້ມູນກ່ອນ, ກ່ອນທີ່ຈະ TodosComponent ຖືກເປີດໃຊ້ງານ.

ດັ່ງນັ້ນ, ໃຫ້ສ້າງຜູ້ຕັດສິນທີ່ຈະລວບລວມວຽກງານຂອງພວກເຮົາ.

ສ້າງ TodosResolver

Angular CLI ບໍ່ມີຄໍາສັ່ງສ້າງຕົວແກ້ໄຂ, ດັ່ງນັ້ນໃຫ້ສ້າງເອກະສານໃຫມ່ src / todos. ຜູ້ແກ້ໄຂ. ts ດ້ວຍຕົນເອງແລະເພີ່ມລະຫັດຕໍ່ໄປນີ້:

     import {Injectable} ຈາກ '@ angular / core'ນໍາເຂົ້າ {ActivatedRouteSnapshot, ແກ້ໄຂ, RouterStateSnapshot} ຈາກ '@ angular / router';import {Observable} from 'rxjs / Observable';import {Todo} ຈາກ '. / todo 'ນໍາເຂົ້າ {TodoDataService} ຈາກ '. / todo-data service '@Injectable   export class TodosResolver ປະຕິບັດການແກ້ໄຂ  > {constructor (private todoDataService: TodoDataService) {}public resolve (ເສັ້ນທາງ: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable    {ຄືນນີ້. todoDataService getAllTodos   }}    

ພວກເຮົາກໍານົດຜູ້ຕັດສິນເປັນຊັ້ນທີ່ຈັດຕັ້ງປະຕິບັດ ການແກ້ໄຂ .

ການປ່ຽນແປງ ການໂຕ້ຕອບ ແມ່ນບໍ່ຈໍາເປັນ, ແຕ່ໃຫ້ TypeScript IDE ຫຼື compiler ຂອງພວກເຮົາໃຫ້ແນ່ໃຈວ່າພວກເຮົາປະຕິບັດການຮຽນຢ່າງຖືກຕ້ອງໂດຍຮຽກຮ້ອງໃຫ້ພວກເຮົາປະຕິບັດວິທີການ resolve .

ຖ້າວິທີການ resolve ກັບຄືນຄໍາສັນຍາຫຼື Router Angular ທີ່ສາມາດສັງເກດເຫັນໄດ້ຈະລໍຖ້າຄໍາສັນຍາຫຼືສາມາດສັງເກດໄດ້ກ່ອນທີ່ມັນຈະເປີດໃຊ້ອົງປະກອບຂອງເສັ້ນທາງ.

ໃນເວລາທີ່ໂທຫາ ວິທີການແກ້ໄຂ , Router Angular ສະດວກໃນການຖ່າຍທອດເສັ້ນທາງທີ່ເປີດໃຊ້ງານແລະພາບສະແດງລັດລັດ router ເພື່ອໃຫ້ພວກເຮົາເຂົ້າເຖິງຂໍ້ມູນ (ເຊັ່ນ: ເພື່ອແກ້ໄຂຂໍ້ມູນ.

ລະຫັດສໍາລັບ TodosResolver ແມ່ນມີຄວາມຊັດເຈນເພາະວ່າພວກເຮົາມີແລ້ວ TodoDataService ທີ່ຈັດການການສື່ສານກັບ API ຂອງພວກເຮົາ.

ພວກເຮົາສັກ TodoDataService ໃນ constructor ແລະໃຊ້ວິທີການ getAllTodos ຂອງມັນເພື່ອຊອກຫາທັງຫມົດຂອງ todo ໃນວິທີການ resolve .

ວິທີການແກ້ໄຂຜົນຕອບແທນຂອງປະເພດ Todo [] , ດັ່ງນັ້ນ Router Angular ຈະລໍຖ້າຜູ້ສັງເກດການສົມບູນກ່ອນທີ່ອົງປະກອບຂອງເສັ້ນທາງຈະຖືກເປີດໃຊ້.

ຕອນນີ້ພວກເຮົາມີຜູ້ແກ້ໄຂຂອງພວກເຮົາ, ໃຫ້ configure Router Semalt ເພື່ອນໍາໃຊ້ມັນ.

ການແກ້ໄຂ todo's ຜ່ານ router

ເພື່ອເຮັດໃຫ້ Semester router ໃຊ້ຕົວແກ້ໄຂ, ພວກເຮົາຕ້ອງຕິດຕັ້ງມັນກັບເສັ້ນທາງໃນການຕັ້ງຄ່າເສັ້ນທາງຂອງພວກເຮົາ.

ໃຫ້ເປີດຂຶ້ນ src / app-routing. module ts ແລະເພີ່ມຂອງພວກເຮົາ TodosResolver ກັບ ເສັ້ນທາງເດີນທາງ

:

     import {NgModule} ຈາກ '@ angular / core'ນໍາເຂົ້າ {RouterModule, Routes} ຈາກ '@ angular / router';ນໍາເຂົ້າ {PageNotFoundComponent} ຈາກ '. / page-not-found / page-not-found ສ່ວນປະກອບ ';ນໍາເຂົ້າ {TodosComponent} ຈາກ '. / todos / todos ສ່ວນປະກອບ ';ນໍາເຂົ້າ {TodosResolver} ຈາກ '. / todos ຜູ້ແກ້ໄຂ 'const routes: Routes = [{ເສັ້ນທາງ: '',redirectTo: 'todos',pathMatch: 'ເຕັມ'},{ເສັ້ນທາງ: 'todos',ອົງປະກອບ: TodosComponent,ແກ້ໄຂ: {todos: TodosResolver}},{ເສັ້ນທາງ: '**',ອົງປະກອບ: PageNotFoundComponent}]@NgModule ({ນໍາເຂົ້າ: [RouterModule. forRoot (ເສັ້ນທາງ)],ສົ່ງອອກ: [RouterModule],ຜູ້ໃຫ້ບໍລິການ: [TodosResolver]})export class AppRoutingModule {}    

ພວກເຮົານໍາເຂົ້າ TodosResolver :

     import {TodosResolver} ຈາກ '. / todos ຜູ້ແກ້ໄຂ '    

ແລະເພີ່ມມັນເປັນຜູ້ແກ້ໄຂບັນຫາ todos ເສັ້ນທາງ:

     {ເສັ້ນທາງ: 'todos',ອົງປະກອບ: TodosComponent,ແກ້ໄຂ: {todos: TodosResolver}}    

ນີ້ບອກ Router Angular ເພື່ອແກ້ໄຂຂໍ້ມູນໂດຍໃຊ້ TodosResolver ແລະກໍານົດມູນຄ່າຜົນຕອບແທນຂອງຜູ້ແກ້ໄຂເປັນ todos ໃນຂໍ້ມູນຂອງເສັ້ນທາງ.

ຂໍ້ມູນທາງເສັ້ນສາມາດເຂົ້າເຖິງໄດ້ຈາກ ActivatedRoute ຫຼື ActivatedRouteSnapshot , ເຊິ່ງຈະເບິ່ງໃນພາກຕໍ່ໄປ.

ທ່ານສາມາດເພີ່ມຂໍ້ມູນຄົງທີ່ໂດຍກົງກັບຂໍ້ມູນຂອງເສັ້ນທາງໂດຍໃຊ້ຄຸນສົມບັດ ຂໍ້ມູນຂອງເສັ້ນທາງ:

                                   
March 1, 2018