ejsとパーシャル
パーシャル・・・テンプレートの一部を部品化して後の変更をやりやすくすることです。
※テンプレート内の小さな部品を”パーシャル”と呼びます。
例えば、この下記のコードを全部のテンプレートで使用したい場合、コピペするのは大変です。また後からコード追加や変更もかなり手間になります。
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
My Site
</title>
<script src="/js/bootstrap.min.js"></script>
</head>
そこで必要なのが「複数箇所で使われるコードを再利用できる別のテンプレート」です。
パーシャルの構文
<%- incluede('パーシャルのファイル名',{受け渡す値}) %>
※{ 受け渡す値 }は省略できます
では早速サンプルを見ていきます。
・head.ejs
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
My Site
</title>
<script src="/js/bootstrap.min.js"></script>
</head>
<body>
・navbar.ejs
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#">Express Demo</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/">ホーム <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/rand">Random</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/r/soccer">Soccer</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/r/chickens">Chickens</a>
</li>
<li class="nav-item">
</li>
</ul>
</div>
</nav>
・footer.ejs
<footer>
フッター!!!
</footer>
</body>
</html>
3つのファイルを作成しておきます。
構文を用いてそれぞれのejsファイルを読み込みます。
<%- include('partials/head') %>
<%- include('partials/navbar') %>
<div class="container">
<h1>
<%= name %> subredditのページ
</h1>
<h2>
<%= description %>
</h2>
<p>
<%= subscribers %>人が購読中
</p>
<hr>
<% for(let post of posts) { %>
<article>
<p>
<%= post.title %> - <b><%= post.author %></b>
</p>
<% if (post.img) { %>
<img src="<%= post.img %>" alt="">
<% } %>
</article>
<% } %>
</div>
<%- include('partials/footer') %>
ちなみに、復習ですが「<%- %>」はejsの記法です。
このタグの中に、出力したいコードを書きます。HTMLエスケープされないで出力されるものになります。