Ngoài giải pháp trước đó của tôi được đăng ở đây, có một phương pháp thứ hai mà tôi tìm thấy sau một chút nghiên cứu: sử dụng Navigation Guards
Như chi tiết trong câu trả lời trước đây của tôi, đây là vấn đề: vue-router
có thể bắt đầu sử dụng lại thành phần tuyến đường sau khi được tạo lần đầu tiên. Có thực sự không cần phải phá hủy các thành phần này trên tuyến đường, và tái tạo trên tuyến đường tiếp theo. Do đó móc created
trong giải pháp trước đó của tôi có thể không kích hoạt trong các lần truy cập tiếp theo trên cùng một tuyến đường. Vì vậy, tiêu đề cửa sổ của chúng tôi có thể không hoạt động như mong đợi.
Để khắc phục sự cố đó, chúng tôi có thể đặt tiêu đề cửa sổ trên sự kiện thay đổi tuyến đường. Ví dụ về bộ định tuyến có móc afterEach
được gọi sau khi thay đổi tuyến đường. Điều này có thể được sử dụng để thiết lập tiêu đề cửa sổ như chi tiết dưới đây:
// Let's say this is your router instance, with all "Named Routes"
const ROUTER_INSTANCE = new VueRouter({
mode: "history",
routes: [
{ path: "/", name: "HomeComponentName", component: HomeComponent },
{ path: "/about", name: "AboutComponentName", component: AboutComponent },
{ path: "*", name: "RouteErrorName", component: RouteError }
]
})
// Assign page titles for each of the "named routes"
// Reason: This allows us to have short named routes, with descriptive title
const PAGE_TITLE = {
"HomeComponentName": "Your Dashboard",
"AboutComponentName": "About Us Page",
"RouteErrorName": "Error: Page not found"
}
ROUTER_INSTANCE.afterEach((toRoute, fromRoute) => {
window.document.title = PAGE_TITLE[toRoute.name]
console.log(toRoute) // this lets you check what else is available to you here
})
này vẫn có thể không giúp bạn nếu bạn đang điều hướng giữa các tuyến đường tương tự, như "/ user/foo" thành "/ user/bar". Nếu bạn muốn tên người dùng trong thanh tiêu đề hoặc một số thông tin cụ thể của trang động, hãy xem Phản ứng với các Thay đổi Params như được mô tả chi tiết trong http://router.vuejs.org/en/essentials/dynamic-matching.html. Dựa trên tài liệu, chúng tôi có thể sử dụng watch
trong thành phần như sau:
watch: {
'$route' (toRoute, fromRoute) {
window.document.title = "some page title"
}
}
Hy vọng điều đó sẽ hữu ích!