ホームページ >ウェブフロントエンド >jsチュートリアル >Node.jsテンプレートエンジンJadeの詳細説明

Node.jsテンプレートエンジンJadeの詳細説明

小云云
小云云オリジナル
2018-01-20 09:13:051968ブラウズ

この記事では主に Node.js テンプレート エンジン Jade について詳しく紹介します。Jade は Node.js 用のテンプレート エンジンです。今回はそれを参考として紹介します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

Jade は Node.js のテンプレート エンジンであり、Haml の多くの側面を利用しているため、その構文は Haml に比較的似ています。さらに、Jade はスペースもサポートします。

1. タグ

Jade では、行頭のテキストはデフォルトで HTML タグとして解釈されます。また、開始タグを記述するだけで済みます。「a8093152e673feb7aba1828c43532094」を追加する必要はありません。なぜなら、Jade が終了タグと開始タグをレンダリングしてくれるからです。例:


body 
  p 
    h1 Jade是Node.js的一个模板引擎
    p  它借鉴了Haml的很多地方,所以语法上和Haml比较相近。
  p 
    footer © Pandora

上記の Jade テンプレートによってレンダリングされる最終的な HTML コードは次のとおりです:


<body>
  <p>
    <h1> Jade是Node.js的一个模板引擎</h1>
    <p>它借鉴了Haml的很多地方,所以语法上和Haml比较相近。</p>
  </p>
  <p>
    <footer>© Pandora</footer>
  </p>
</body>

注: タグ名が記述されていない場合、デフォルトは p タグです。

2. 変数/データ

Jade テンプレートに渡されるデータはローカルと呼ばれます。 変数の値を出力するには、等号「=」を使用します。

(ローカル):


{
  title: "Express.js Guide",
  body: "The Comprehensive Book on Express.js"
}

Jade code:


h1= title
p= body

レンダリングされた出力HTML:


<h1>Express.js Guide</h1>
<p>The Comprehensive Book on Express.js</p>

3. 変数の読み取り

ジェイドが渡されました # {name} を達成する必要があります。例:


- var title = "Node"

p I love #{title}

変数の値はテンプレートのコンパイル時に処理されるため、実行可能な JavaScript(-) では使用しないでください。

4. 属性

属性はラベルの後に「()」で囲まれ、複数の属性は「,」で区切られます。例: body (name1 = "value1"、name2 = "value2")。


p(id="content", class=&#39;main&#39;)
  a(href=&#39;http://csdn.net&#39;, title=&#39;csdn主页&#39;, target=&#39;_blank&#39;) CSDN:中国软件联盟
  form(action="/login")
    button(type="submit", value="提交")

出力:


<p id="content" class=&#39;main&#39;>
  <a href=&#39;http://csdn.net&#39; title=&#39;csdn主页&#39; target=&#39;_blank&#39;> CSDN:中国软件联盟</a>
  <form action="/login">
    <button type="submit" value="提交">
  </form>
</p>

動的属性:

動的属性は、属性の値が動的であること、つまり、属性の値を表すために変数が使用されることを意味します。記号「|」を使用すると、HTML ノードのコンテンツを新しい行に記述することができます。例:


a(href=url, data-active=isActive)
label
  input(type="checkbox", checked=isChecked)
  | yes / no

上記のテンプレートに提供されたデータ:


{
  url: "/logout",
  isActive: true,
  isChecked: false
}

最終的にレンダリングされた HTML:


<a href="" data-active=" rel="external nofollow" data-active"></a>
<label>
  <input type="checkbox" />yes / no
</label>

注: false 値を持つ属性は、HTML コードを出力するときに無視されます。属性がない場合は、値が渡されると、デフォルトで true になります。

5. リテラル

手間を省くために、クラス名と ID 名をタグ名の後に直接記述することができます。例:


p#content
  p.lead.center
    | Pandora_galen
    #side-bar.pull-right // 没有标签名,默认为“p”
    span.contact.span4
      a(href="/contact" rel="external nofollow" rel="external nofollow" ) contact me

レンダリングされた出力 HTML:


<p id="content">
  <p class="lead center">
  Pandora_galen
  <p id="side-bar" class="pull-right"></p>
  <span class="contact span4">
    <a href="/contact" rel="external nofollow" rel="external nofollow" > contact me </a>
  </span>
</p>

6, text

元のテキストを出力するには、「|」記号を使用します。


p 
  | 我两年前开始学习前端
  | 在此之间,我学过了html, jQuery, JavaScript, Python, Css3, HTML5, Bootstrap, D3.js, SVG...而现在我在学Node。并且我已经深深的爱上了前端。

7. スクリプトとスタイルブロック

生成されたコード:


script.
  console.log("Hello world!");
  setTiemout(function() {
    window.location.href = "http://csdn.net"
  }, 1000);

  console.log("Good bye!");

を作成するには、「.」記号を使用します。


8. JavaScript コード

-、= またはを使用します。 =これら 3 つのシンボルは、出力を操作できる実行可能な JS コードを Jade で記述するために使用されます。これは、HTML 要素を出力したり、JavaScript を挿入したりするときに便利です。ただし、これを行うときは、クロスサイト スクリプティング (XSS) 攻撃を避けるように注意する必要があります。

例えばこんなことができます! =配列を定義し、タグ データを出力します:

<script>
  console.log("Hello world!");
  setTiemout(function() {
    window.location.href = "http://csdn.net"
  }, 1000);

  console.log("Good bye!");
</script>

生成されたコードは次のとおりです:


- var arr = [&#39;<a>&#39;, &#39;<b>&#39;, &#39;<c>&#39;]
ul
  -for (var i = 0; i < arr.length; i++)
    li
      span= i
      span!= "unescaped:" + arr[i] + "vs."
      span= "escaped:" + arr[i]

テンプレート エンジン Jade と Handlebars の主な違いは次のとおりです: Jade では、ほとんどすべての JavaScript をコード; しかし、ハンドルバーは開発者を少数の組み込みおよびカスタムヘルパーに制限します。


9. コメント


Jade には 2 種類のコメントがあります:

。ページに出力されません - "/ /- "


<ul>
  <li><span>0</span><span>unescaped: <a>vs. </span><span>escaped: <a></span></li>
  <li><span>1</span><span>unescaped: <b>vs. </span><span>escaped: <b></span></li>
  <li><span>2</span><span>unescaped: <c>vs. </span><span>escaped: <c></span></li>
</ul>

出力:


// 普通注释,会输出到渲染后生成的HTML页面
p Hello Jade content

//- 特殊注释,不会输出到HTML页面
p (id="footer") copyright 2016

10. If ステートメント

標準の JavaScript コードを記述できるように、if ステートメントにプレフィックス - を追加します。プレフィックスや括弧を使用しないこともできます。もちろん後者の方がより簡潔です。

<!-- 普通注释,会输出到渲染后生成的HTML页面 -->
<p> Hello Jade content </p>

<p id="footer">copyright 2016</p>
さらに、not or に相当する、unless があります。 。

注: コードの各行の末尾にはセミコロン「;」はありません


Jade の各ステートメント

は非常に単純で、各ステートメントを使用するだけです。

- var user = {}
- user.admin = Math.random() > 0.5

if user.admin
  button(class = "launch") Launch Spacecraft
else 
  button(class = "login") Log in
出力:

- var language = [&#39;JavaScript&#39;, &#39;Node&#39;, &#39;Python&#39;, &#39;Java&#39;]
p
  each value, index in language
    p= index + "," + value

例2:

<p>
  <p>0. JavaScript</p>
  <p>1. Node</p>
  <p>2. Python</p>
  <p>3. Java</p>
</p>

出力:

- var language = [&#39;JavaScript&#39;: -1, &#39;Node&#39;: 2, &#39;Python&#39;: 3, &#39;Java&#39;: 1]

p 
  each value, key in languages
    p= key + ":" + value

フィルターコンバーターの目的は次のとおりです: 別の言語を使用するテキスト ブロックを作成するには;


<p>
  <p>JavaScript: -1</p>
  <p>Node: 2</p>
  <p>Python: 3</p>
  <p>Java: 1</p>
</p>
注: Markdown フィルターを使用するには、Marked および Markdown NPM パッケージに加えて、Markdown モジュールをインストールする必要があります。

13、case



p
  :markdown
    # practical Node.js
    [This book](http://csdn.net) really helps to grasp many coponents needed for modern-day web development.

14、関数 mixin

Sass または compass mixin を使用したことがある場合は、間違いなく精通しているでしょう。Jade での mixin の使用法は基本的に同じです。彼らのように。

声明的语法: mixin name(param, param2, …….)

调用: +name(data)


mixin row(items)
  tr
    each item, index in items
      td= item

mixin table(tableData)
  table
    each row, index in tableData
      +row(row)

- var node = [{name: "express"}, {name: "Jade"}, {name: "Handlebars"}]
+table(node)

- var js = [{name: &#39;backbone&#39;}, {name: &#39;angular&#39;}, {name: "emberJS"}]
+table(js)

输出:


<table>
  <tr>
    <td>express</td>
  </tr>
  <tr>
    <td>Jade</td>
  </tr>
  <tr>
    <td>Handlebars</td>
  </tr>
</table>

<table>
  <tr>
    <td>backbone</td>
  </tr>
  <tr>
    <td>angular</td>
  </tr>
  <tr>
    <td>emberJS</td>
  </tr>
</table>

15、include

include与引入JS和CSS外部文件很相似。它是自顶向下的方法: 在include其它文件的主文件里,我们决定要用什么。主文件会被首先处理(可以在主文件了定义数据locals),然后才会再接着处理主文件里所包含进来的子文件(子文件里可以使用主文件中定义的数据locals);

包含一个Jade模板,用include /path/filename.

例如,在文件A里:


include ./includes/header

注意: 这里不用给模板名以及路径添加双引号或者单引号。

再例如,从父目录开始查找:


include ../includes/footer

注意:不能再文件名和文件路径中使用变量,因为includes/partials是在编译时处理的,而不是在执行时。

对于使用Sass、Compass又或者Less的人这些事再熟悉不过的了。

16、extend

extend与include“唱对台戏”,正好相反,extend是一种自底向上的方法。它所包含的文件决定它要替换主文件中哪那一部分。

使用格式: extend filename 和 block blockname;

示例-1: 在文件file_a里:


block header
  p some default text
block content
  p loading...
block footer
  p copyright

示例-2: 在文件file_b里:


extend file_a
block header
  p very specific text
block content
  .main-content

相关推荐:

详解基于模板引擎Jade的应用

学习 Jade_html/css_WEB-ITnose

node+express+jade制作简单网站指南_node.js

以上がNode.jsテンプレートエンジンJadeの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。