天天看点

JavaScript基础学习——pug

一、认识pug

pug 是一个高性能的模板引擎,它是用 JavaScript 实现的,并且可以供 Node 使用。通过一套语法把某一段静态的模板,通过模板引擎将动态的数据替换进去,然后将生成的html交给浏览器去解析和渲染。pug是jade的升级版。

二、pug的特点

  1)超强的可读性

  2)客户端支持

  3)灵活易用的缩进

  4)安全,默认代码是转义的

  5)命令行下编译jade模板

  6)模板继承

  7)块扩展

  8)编译及运行时的上下文错误报告

  9)HTML5模式

  10)可选的内存缓存

  11)联合动态的静态标记类

  12)利用过滤器解析树的处理

  13)没有前缀的标签

  14)原生支持 express 模块

三、pug的安装

1、全局安装。

    npm i pug -g

    npm i pug-cli -g

2、在项目中使用pug,需要局部安装pug。

  首先,创建一个package.json文件。

      npm init -y

  再安装pug,并写入到package.json文件中。

      npm i pug --save-dev

四、编译

编译语法:pug pug文件名 -o 目标路径 -P -w

Tips:

-P:编译成非压缩格式

-w:实时监听

五、pug基本语法    

1、文档声明

    doctype html

2、标签语法

每层级标签之间都采用多一个缩进表示嵌套关系,无需闭合标签,无需尖括号。

3、属性

4、文本

5、注释

6、安全转义与安全非转义

doctype html 
html 
  head 
    title pug语法
  body 
    p.body.p1.hello 这是段落
    ul 
      li 选项一
      li 选项二
    div.box box1 
    div(class='box2') box2 
    -var cls=true 
    div(class=cls?'box3':'box4') box3
    .box4 box4
    input(
      type='text'
      class="username"
      name="username"
      id="username"
    )
    input(type='checkbox',checked)
    p(style="color:red;font-size:18px")
    h2(style="color:yellow;font-size:20px")
    div.foo
    .foo.bar 
    div(class="foo bar")
    -var classes=['box1','box2','box3']
    div(class=classes)
    div.bing(class=classes)
    div#box 
    div(id='box')
    .oh 
    #no 
    #foo.oh.no 
    h1 这是一个h1标签
    .box hello pug 
    -var obj={name:'tom'}
    p #{obj.name} is a man
    -var url='http://www.baidu.com'
    a(href=url) 百度一下
    p 
      | hello pug
      | hello node
      | hello worlds
    p.
      hello <b>pug</b>
      hello node
      hello worlds
    //注释1
    //-注释2
           

六、条件语句

1、if...else

2、if...else if...else

3、unless

4、case

doctype html 
html 
  head 
    meta(charset='utf-8')
    title 条件语句
  body 
    //if...else
    -var flag =true 
    if flag 
      p=flag
    else 
      p=flag 
    //if...else if.else 
    -var num=1
    if num >1
      p 10
    else if num==1
      p 2
    else 
      p=num
    //unless:相当于取反
    -var num =3
    //表示num不等于10
    unless num==10
      p this num is #{num}

    //case
    -var friends =5
    case friends 
      when 0
        p nobody 
      when 1
        p one 
      default 
        p #{friends}
           

七、循环语句

for

for...in

while

each

doctype html 
html 
  head 
    meta(charset='utf-8')
    title 循环语句
  body 
    //for迭代数组
    -var arr=[1,2,3,4]
    ul
      -for(var i=0;i<arr.length;i++)
        li=i+':'+arr[i] 

    //for..in迭代对象
    -var obj={id:'001',name:'tom'}
    ul 
      -for(var key in obj)
        li=key+':'+obj[key]

    //each 迭代数组
    -var arr=[1,2,3,4]
    ul 
      each val in arr 
        li=val 

    -var arr=[1,2,3,4]
    ul 
      each val,idx in arr 
        li=idx+':'+val 
    
    //each 迭代对象
    -var obj={id:'001',name:'tom'}
    ul 
      each val in obj 
        li=val
        
    -var obj={id:'001',name:'tom'}
    ul 
      each val in obj 
        li=key+':'+val

    //while
    -var num=1
    ul 
      while num<=10
        li=num++
           

八、mixin混合

mixin类似一个函数,可传参也可不传。

定义mixin语法:

            mixin mixin名([形参列表])

                代码块

调用mixin语法:

                +mixin名(实参列表)

doctype html 
html 
  head 
    meta(charset='utf-8')
    title 循环语句
  body 
    //基本用法
    mixin study 
      p test 
    +study

    //传参
    mixin study(name,courses)
      p=name 
      ul.course.box
        each course in courses
          li=course 
    +study('zs',['web','pug'])

    //代码块
    mixin show(time)
      h3=time 
      //判断是否存在block
      if block 
        block 
      else 
        p no show 
    +show('2021-11-11')


    //传递属性
    mixin attrs(name)
      p&attributes(attributes) #{name}
    +attrs('attrs')(class='p',id='p')

    //列表传递
    mixin show(name,...shows)
      p=name 
      ul
        each show in shows 
          li=show 
    +show('binge','sing','dance','sleep')
           

九、模板继承

用extends继承父模板,哪个文件继承,就调用哪个文件的block为content的模块。

//-extends继承语法,common为继承的文件
extends common 
block content 
  mixin fn(name,...shows)
    p=name 
    ul 
      each show in shows 
        li=show 
  +fn('binge','sing','dance','sleep')
           

common.pug

doctype html 
html 
	head 
		title pug模板继承
	body 
		h1 这是pug父模板的内容
		//哪个文件继承,就调用哪个文件的block为content的模块
		block content
           

十、包含(include)

允许在文件中插入另一个文件内容。

extends public 
block content 
  //-block  index自身模板
  mixin show(name,...shows)
    p=name 
    ul 
      each show in shows 
        li=show 
  +show('binge','sing','dance','sleep')
           

header.pug

meta(charset='utf-8')
title pug模板包含
link(rel="stylesheet",href="css/style.css" target="_blank" rel="external nofollow" )
           

public.pug

doctype html 
html 
  head 
    //-引入header.pug 
    include header 
  body 
    h1 pug模板
    block content 
           

继续阅读