Home  >  Article  >  Web Front-end  >  Detailed explanation of Node.js template engine Jade

Detailed explanation of Node.js template engine Jade

小云云
小云云Original
2018-01-20 09:13:051864browse

This article mainly introduces the detailed introduction to the Node.js template engine Jade. Jade is a template engine for Node.js. The editor thinks it is quite good. Now I will share it with you and give it as a reference. Let’s follow the editor to take a look, I hope it can help everyone.

Jade is a template engine for Node.js. It draws on many aspects of Haml, so its syntax is similar to Haml. Moreover, Jade also supports spaces.

1. Tags

In Jade, any text at the beginning of a line is interpreted as an HTML tag by default. And you only need to write the opening tag-note: no need to add "a8093152e673feb7aba1828c43532094". Because Jade will render the closing and opening tags for us. For example:


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

The HTML code finally rendered by the Jade template above is:


##

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

Note: If not If you write a tag name, the default is the p tag.


2. Variables/data

The data passed to the Jade template is called locals. Use the equal sign "=" to output the value of a variable.

(locals):


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

Jade code:

##

h1= title
p= body

Rendered output HTML:

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

3. Reading variables

The value of reading variables in Jade is achieved through #{name}. For example:

- var title = "Node"

p I love #{title}

The value of the variable is processed when the template is compiled, so do not use it in executable JavaScript(-).


4. Attributes

The attributes follow the label and are enclosed by "()", and multiple attributes are separated by ",". For example: 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="提交")

Output:

<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>

Dynamic Properties:

Dynamic The attribute, that is, the value of the attribute is dynamic, that is, a variable is used to represent the value of the attribute. The symbol "|" can write HTML node content in a new line. For example:

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

Data provided to the above template:

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

Final rendered HTML output:

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

Note: Attributes with a false attribute value will be ignored when outputting HTML code; when no attribute value is passed in, it will default to true.

5. Literal

To save trouble, you can write the class name and ID name directly after the tag name. For example:

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

Rendered output 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

Use the "|" symbol to output the original text.

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

7. Script and Style blocks

Use the "." symbol to create

# in HTML

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

  console.log("Good bye!");

Generated code:

##

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

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

Similarly, style. generates c9ccee2e6ea535a969eb3f532ad9fe89531ac245ce3e4fe3d50054a55f265927.


8. JavaScript code

Use -, = or! =These three symbols are used to write executable JS code in Jade that can manipulate the output. This is useful when outputting HTML elements and injecting JavaScript. However, you must be careful to avoid cross-site scripting (XSS) attacks when doing this. For example, you can use it! =Define an array, output tag data:

##
- 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]

The generated code is as follows:


##

<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>

Template engine Jade and One of the main differences with Handlebars is that Jade allows almost all JavaScript to be written in the code; however, Handlebars limits developers to a small number of built-in and custom helpers.


9. Comments


Jade has two types of comments:

f35d6e602fd7d0f0edfa6f7d103c1b57. Output to the page— —“//” 2cc198a1d5eb0d3eb508d858c9f5cbdb. Not output to the page—— “//-”


##

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

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

Output:


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

<p id="footer">copyright 2016</p>

10. If statement

Add a prefix - to the if statement, so that you can write standard JavaScript code; you can also use it without prefixes or brackets , of course the latter is more concise.

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

if user.admin
  button(class = "launch") Launch Spacecraft
else 
  button(class = "login") Log in
In addition, there is unless, which is equivalent to no or! .

Note: There is no semicolon ";" at the end of each line of code


11. Each statement

Iterate in Jade It's very simple, just use the each statement.

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

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

Example 2:

- 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

Output:

<p>
  <p>JavaScript: -1</p>
  <p>Node: 2</p>
  <p>Python: 3</p>
  <p>Java: 1</p>
</p>

12. Filter

The function of the filter is: Write in another language A text block;

p
  :markdown
    # practical Node.js
    [This book](http://csdn.net) really helps to grasp many coponents needed for modern-day web development.
Note: To use the Markdown filter, you need to install the Markdown module, as well as the Marked and Markdown NPM packages.

13、case


- var coins = Math.round(Math.random() * 10)

case coins
  when 0
    p You have no money
  when 1
    p You have a coin
  default
    p You have #{coins} coins!

14、Function mixin

If you have used sass or compass mixins, you will definitely be familiar with them, and the method of using mixins in Jade is basically the same as them.

声明的语法: 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

The above is the detailed content of Detailed explanation of Node.js template engine Jade. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn