vue 7

จัดการเส้นทาง ด้วย this.$router

Pakawat Mange
3 min readJun 21, 2019

ตอนนี้เราจะเข้าไปดู user แต่ละคน จะทําปุ่มดู user ก่อนเลยครับ โดยเพิ่ม button หนึ่งตัว

ทําการสร้าง method ใหั Vue Component

โดย method นี้จะเป็นการ เรียก Vue Component ที่ชื่อว่า

components/Users/ShowUser.vue มา Render

แทน components/Users/Index.vue

เพิ่ม code เข้าไปใน tag script ใน

components/Users/Index.vue

code ชุดนี้ เมื่อเราเรียกใช้เราจะส่ง path ที่เราต้องการให้วิ่งไป ผ่านตัวแปร route

โดย this.$router.push(route)

จะทําการเรียกใช้ได้เลย เพราะติดตั้งมากจาก vue-cli ให้เรียบร้อยแล้วครับ

ซึ่งจริง ๆ แล้ว v-on:click=”navigateTo(‘/user’)” ก็คือ function onclick เพียงแต่ว่าแต่ละภาษาก็จะมี syntax ของเค้าเราก็ว่ากันตามเค้าไป เอาเป็นว่าเราเข้าใจใช้งานได้คือจบครับ

กดปุ่ม ดูข้อมูลผู้ใช้จะทําการ Route ไปตามที่กําหนดไว้โดยคําสั่ง

this.$router.push(route)

ซึ่ง path ที่เราส่งไป เพื่อทําการ routing ก็คือ /user ซึ่งก็คือ url

http://localhost:8080/#/user

นั่นเองผลการกดปุ่มก็ไม่มีอะไรมากจะ route ไป path ที่ส่ง

แต่ความจริงแล้วเวลาที่กดดูเข้าข้อมูล user ของแต่ละคนเราต้องทําการดึงข้อมูล user คนนั้นออกมา โดยเรามักจะกําหนดจาก id

ดังนั้นเวลาที่เรา กดปุ่มดูข้อมูล ผู้ใช้ เราต้องทําการส่ง id พ่วงมาด้วยเราเริ่มเช็คกันตั้งแต่ router/index.js เลย

ทําการเปิด src/router/index.js มองหา code ชุดนี้ครับ

จากนั้นเปลี่ยนเป็น

ที่เราจะทําการส่ง userId พ่วงไปด้วย แน่นอนเมื่อทําการส่งไปก็ต้องมีการรับเราไปเขียน code สําหรับ รับค่า userId กัน

ที่เราวางแผนไว้ คือ

components/Users/Index.vue → (userId) → components/Users/ShowUser.vue

ดังนั้น ตัวที่รับงานที่เราส่งไปจัดการต่อ คือ

components/Users/ShowUser.vue นั่นเอง

เปิด ShowUser.vue ทําการแก้ไข code

จาก code เหมือนเดิมครับเราเริ่มทํางานที่ created () ก่อนเหมือนเดิม

โดยเรามีตัว แปร หรือ data () ของเราคือ userId กําหนดค่าเริ่มต้นไว้ userId = 0

this.$route.params.userId

มาเก็บไว้ที่ userId แล้วไอ้เจ้านี่มายังไงมาตอนเราติดตั้ง vue-cli เลยติดตั้ง router มาให้เราเรียกใช้งาน this.$route ได้

จําไว้อย่างจะ

  • สั่งงานให้วิ่งไปไหนทําอะไร จะเป็น this.$router (เร้าเตอร) แต่
  • ถ้าอ่านค่า ่านมันเป็น this.$route (รูท) นะครับ
  • router != route นะคับ จําไว้ ๆ ครับ
http://localhost:8080/#/user/3

จาก url ที่จะไปเปิดบน web browser ของ จะเห็นได้ว่าส่ง /3 แนบไปด้วย ซึ่งคือ userId ของผมนั่นเอง โดย web brwoser

เมื่อทําการกดปุ่ม browser ก็จะวิ่งไปตามที่กําหนดไว้ พร้อมส่ง userId แนบไป ด้วยนั่นเอง

ทําการแสดงข้อมูลผู้ใช้แต่ละคน

เมื่อเราทําการรับส่ง userId ได้แล้วในตอนนี้จะทําการ get user by id เพื่อดึง ข้อมูลผู้ใช้มาแสดง

ทําการเปิด src/components/Users/ShowUser.vue

แล้วทําการแก้ code เป็นดังนี้ครับ

เริ่มต้นจาก created () แล้วเหมือนเดิม แต่จากที่เราใช้การ load ข้อมูลจาก api server ที่เราทําไว้เราต้องทําการใส่ await และ asynce เหมือนเดิม

จากนั้นทําการแสดงผลผ่าน template ที่เราทําไว้นั่นเองในกรณีนี้ถ้าเรา error จากการทํางานต่างๆ เราจะไม่รู้เลยเราจะทําการดักมันไว้ ก่อนด้วย

try/catch ในการณีที่เราโหลดข้อมูลจาก api server แลวทํางาน ผิดพลาดครับ จะได้แจ้ง error ให้ทราบ

อย่าลืมตามไปแก้ที่ src/components/Users/Index.vue

จะได้รู้เวลามันเกิด error ตอนโหลดข้อมูล

--

--