2014-11-21 3 views
5

layout.ejs 템플릿에있는 페이지에 따라 각 탐색 링크에 '현재'클래스를 렌더링하고 싶습니다.Node.js, Express, EJS - 내비게이션의 현재 페이지에있는 활성 클래스

// About 
exports.about = function(req, res) { 
    res.render('content/about.ejs', { 
     title: 'About' 
    }); 
}; 

을 그리고 내 layout.ejs에서 나는 동적으로 렌더링 할 좋아하려는 다음을 가지고 :

현재, 내 특급 컨트롤러 지수는 다음과 같습니다.

<ul class="nav" id="nav"> 
    <li><a href="/">Home</a></li> 
    <li class="current"><a href="/about">About</a></li> 
    <li><a href="/">Contact</a></li> 
</ul> 

어떻게해야할까요?

답변

16

당신은 같은 템플릿 뭔가 상기 res.render 데이터 page_name: 'about' 다음이 포함될 수 :

<li <% if (page_name === 'about') { %>class="current" <% } %> ><a href="/about">About</a></li> 

내가 구문을 테스트하지 않았다,하지만 그 요점입니다.

+1

감사합니다. 실제로 구문을 포함하여 정확합니다. 매우 감사. 나는 아직 투표권이 없기 때문에 대답을 수락 할 것입니다. – dinkco

+0

'app.get()'의 입력으로부터'page_name'을 자동으로 얻는 방법은 없나요? – jeff

+0

'req.path'는 아마도 가장 가까운 것입니다. 문서는 [here] (https://expressjs.com/en/api.html#req.path)를 참조하십시오. 경로에서 슬래시를 쉽게 제거하여 page_name에 가까운 것을 얻을 수 있습니다. 하지만 중첩 된 경로 이름 (예 :'/ about/fred')은 제대로 작동하지 않습니다. req.path (예 :'req.path.replace (/ \ // g, '_')')의 강조 표시된 버전이 페이지 이름을 표현하는 컨벤션을 만들기 위해 슬래시를 밑줄로 바꿀 수 있습니다. – thataustin