Nodejs中的模板引擎之jade2

2018-07-23  本文已影响0人  乔乔_老师

上节中我们讲了一些jade的基本用法,这一节,我们继续补充jade的一些用法。

jade可以自动识别单双标签,看如下jade代码
div
  input
js代码
const jade=require('jade');
var str=jade.renderFile('./views/1.jade',{pretty:true});
console.log(str);

然后我们执行以上js代码,我们会发现input自动被解析成了单标签


1.png

如果我们的代码不符合规范,jade在解析的时候也会自动报错,假如我们有如下jade代码

input
  div

我们再次执行上面的js,我们发现会报错


2.png
在jade中,所有自定义的标签都默认为双标记

假如我们有如下jade代码,我们添加了自定义标签aaa

div
  input
  aaaa

然后我们再次执行上面的js代码


1.png

我们发现aaaaa会自动被解析成双标签

通过上一个案例我们知道如果我们在div下面再添加一个aaa,那么会被自动解析为一个双标记,但是如果我们只想把aaa作为div中的内容,而不是标签,这时我们需要做以下操作

html
    head
    body
        |aaa
        |bbb
        |ccc

我们想要让什么成为内容,即在当前内容前面添加“|”即可

“|” 在jade中代表原样输出

这时我们发现aaa bbb ccc已经成为body中的内容,而不是标签


2.png

但是这样比较麻烦,如果我们的内容比较多,那么我们要添加很多“|”,所以还有比如上方法更简单的
看如下代码:

html
  head
    script.
      window.onload=function (){
        var oBtn=document.getElementById('btn1');
        oBtn.onclick=function (){
          alert('aaaa');
        };
      };
  body
    |abc
    |ddd
    |213

script中的内容我们想要原样输出。这时我们只需要在script后面加个点就可以了
这时我们会发现输出了我们想要的


3.png

但是上面的方法还是有点麻烦,因为日如果我们的js代码比较多,我们不可能把所有的js代码都放在头部,这时就需要引入一个外部的js了。
我们新建一个1.js,把上面的js代码放进去,

jade代码

html
  head
    script
     include a.js
  body
    |abc
    |ddd
    |213

然后我们再次执行一下如下代码

const jade=require('jade');
var str=jade.renderFile('./views/13.jade',{pretty:true});
console.log(str);

然后我们会发现输出的js代码同样在scripet中


3.png
如何在Jade中解析变量

有如下jade代码:

html
    head
    body
        div 我的名字叫:#{name}

现在我们要把name解析出来,所以我们需要创建一个js,代码如下

const jade=require('jade');
console.log(jade.renderFile('./views/jade13-2.js',{pretty:true,name:'amy'}));
然后我们执行以上js代码我们会发现会输出如下结果 1.png

jade中不仅可以输出变量,还可以做运算
假如我们有如下jade代码:

html
    head
    body
        div 我的年龄是:#{a+b}

js代码如下:

const jade=require('jade');
console.log(jade.renderFile('./views/133.jade',{pretty:true,a:3,b:5}));

执行以上js代码我们会发现jade给我们自动做运算了


2.png

接下来我们要给一个元素添加样式或class
有如下js代码

const jade=require('jade');
console.log(jade.renderFile('./views/134.jade',{pretty:true,
    json:{width:'100px',height:'100px',background:'red'},
    arr:['box','content']
}))

现在我们要把json中的样式添加给div,把arr中的值天加给元素作为class
jade代码如下

html
    head
    body
        div(style=json)
        div(class=arr)
        div(class=arr class='active')

代码执行完的结果如下:


3.png

我们发现json中的样式与arr中的class自动添加到了div中

在jade语法中想要解析并执行一段js代码该怎么做,接下来有如下 jade代码

html
    head
    body
        var a=13;
        var b=12;
        div:结果是:#{a+b}

jade中解析变量的两种方法:
有如下js代码:

const jade=require('jade');
console.log(jade.renderFile('./views/135.jade',{pretty:true,a:3,b:5}));
我们执行以上上述jade代码发现输出如下结果 1.png

我们是想把var a=13;var b=12;当成一段js代码来解析,但是我们发现程序给我们解析成了标签。所以我们需要对jade代码做以下操作,代码如下:

html
    head
    body
        -var a=13;
        -var b=12;
        div:结果是:#{a+b}
在变量前面加一个'-',然后执行出来的结果如下图所示: 2.png

这才是我们所要的结果

我们现在要把a 和b解析到标签中去
jade代码如下

html
    head
    body
        span #{a}
        span #{b}

        div=a
        div=b

执行上述代码,输出的结果如下


1.png

我们发现使用span #{a}和使用span=a这种方式解析出来的结果一样,而且第二种方式还更简单

jade中的循环

有如下js代码

const jade=require('jade');
console.log(jade.renderFile('./views/137.jade',{pretty:true,
 arr:['a','b','c','d','e','f','g']
}));

现在我们要把arr中的值分别输出在7个div中,在jade代码中该如何实现呢,看如下代码:

html
    head
    body
        -for(var i=0;i<arr.length;i++)
            div=arr[i] 

上述代码执行完的结果如下图所示


3.png
在jade中如何解析标签

有如下js代码:

const jade=require('jade');
console.log(jade.renderFile('./views/138.jade',{pretty:true,
    content:'<h1>标题</h1><p>这是一段内容这是一段内容这是一段内容</p>'
}));

jade代码如下

html
    head
    body
        div!=content

使用

div!=content那解析出来的标签是标签,内容是内容

结果如下图所示


在jade中使用if条件判断

有如下jade代码:

html
  head
  body
    -var a=19;
    if(a%2==0)
      div(style={background:'red'}) 偶数
    else
      div(style={background:'green'}) 奇数

执行完如下代码输出的结果如下


2.png
在jade中使用switch.....case语句

jade中的switch和原生js中的switch语句不一样,jade中的switch.....case语法

 case a
      when 0
        div aaa
      when 1
        div bbb
      when 2
        div ccc
      default
        |不靠谱

有如下 jade代码

html
  head
  body
    -var a=1;
    case a
      when 0
        div aaa
      when 1
        div bbb
      when 2
        div ccc
      default
        |不靠谱
上一篇下一篇

猜你喜欢

热点阅读