Hãy thử điều này trước khi cuộc gọi của bạn res.render() trong lộ trình của bạn:
res.locals.path = req.path;
res.render('/page');
hoặc
res.render('/page', { path: req.path });
Sau đó, bạn sẽ phải làm một một loạt các câu lệnh if/else trong quan điểm của bạn (như giải pháp trên cho thấy).
- if(currentUrl === '/')
li(class='active')
a(href='/') Current Driver Standings
- else
li
a(href='/') Current Driver Standings
Tôi tuy nhiên, thích làm này đứng về phía khách hàng thay vào đó, để giữ mẫu của tôi tập tin miễn phí từ nhiều lý càng tốt:
Trong trang tập tin mẫu (đây là EJS, không chắc chắn làm thế nào để tiếng vang trong ngọc bích):
<body data-path="<%= path %>">
Sau đó với jQuery bạn có thể lấy các con đường từ cơ thể và đính kèm một lớp tích cực:
$(function(){
var path = $('body').attr('data-path');
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Cập nhật: Bạn cũng có thể chỉ cần sử dụng var path = window.location.pathname
thay vì lưu nó vào một thuộc tính trên body
//no need to save path to <body> tag first:
$(function(){
var path = window.location.pathname;
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Điều duy nhất tôi sẽ nói về nó, là bạn đang dựa vào người dùng có JS (không phải là một mối quan tâm lớn những ngày này) nhưng bạn có thể kết thúc với những thứ khác hiện có như là thuộc tính vì lý do nào đó và rất nhiều đánh dấu xấu xí sản xuất – Jon
Ngoài ra là có một lỗi đánh máy trong ví dụ của bạn? Req.path có sẵn trong EJS không? Nó không phải là tài sản của mô hình xem của bạn? – Jon
xin lỗi, trong các tuyến đường của tôi, tôi làm res.locals.req = req để tôi có quyền truy cập vào tất cả thông tin đó. Nhưng tôi chỉ nhận ra rằng bạn cũng có thể chỉ cần sử dụng window.location.pathname thay vì lưu nó trên thẻ body. – chovy