Pug 介紹和在 Vue 中使用

1 介紹

pug 是一種前端模板引擎颖侄,原名 jade

可用來生成 HTML昭卓,它的寫法類似于 CSS

中文文檔

這里先簡單舉幾個 ??

#hello
<div id="hello"></div>
a.link-button Link
<a class="link-button">Link</a>
a() 我的網(wǎng)站
<a >我的網(wǎng)站</a>

易理解,同時極大的簡約了我們的代碼笛丙。

2 安裝

2.1 下載

npm i -D pug pug-html-loader pug-plain-loader
# or
yarn add pug pug-html-loader pug-plain-loader

2.2 配置

// vue.config.js
module.exports = {
    chainWebpack: config => {
      config.module.rule('pug')
        .test(/\.pug$/)
        .use('pug-html-loader')
        .loader('pug-html-loader')
        .end()
  }
}

2.3 使用

<template lang="pug">
    div.hello
        h1 Hello World
</template>

3 實踐

3.1 舉例

下面將拿出實際項目中的一些代碼進行改造

  • 原代碼

20 行颇蜡,所有標簽完全閉合

<template>
  <el-card shadow="never" class="aui-card--fill">
    <div class="mod-sys__dept">
      <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
        <el-form-item>
          <el-button type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
        </el-form-item>
      </el-form>
      <el-table v-loading="dataListLoading" :data="dataList" row-key="id" border style="width: 100%;">
        <el-table-column prop="name" :label="$t('dept.name')" header-align="center" min-width="150"></el-table-column>
        <el-table-column prop="parentName" :label="$t('dept.parentName')" header-align="center" align="center"></el-table-column>
        <el-table-column prop="sort" :label="$t('dept.sort')" header-align="center" align="center" width="80"></el-table-column>
        <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
          <template slot-scope="scope">
            <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
            <el-button type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
  </el-card>
</template>
  • 改造后

13 行价说,標簽完全簡化

<template lang="pug">
  el-card.aui-card--fill(shadow="never")
    .mod-sys__dept
      el-form(:inline="true" :model="dataForm" @keyup.enter.native="getDataList()")
        el-form-item
          el-button(type="primary" @click="addOrUpdateHandle()") {{ $t('add') }}
      el-table(v-loading="dataListLoading" :data="dataList" row-key="id" border style="width: 100%;")
        el-table-column(prop="name" :label="$t('dept.name')" header-align="center" min-width="150")
        el-table-column(prop="parentName" :label="$t('dept.parentName')" header-align="center" align="center")
        el-table-column(prop="sort" :label="$t('dept.sort')" header-align="center" align="center" width="80")
        el-table-column(:label="$t('handle')" fixed="right" header-align="center" align="center" width="150")
          template(slot-scope="scope")
            el-button(type="text"
                      size="small"
                      @click="addOrUpdateHandle(scope.row.id)") {{ $t('update') }}
            el-button(type="text"
                      size="small"
                      @click="deleteHandle(scope.row.id)") {{ $t('delete') }}
</template>

el-button 由于屬性過長,使用了分行

4 特性

4.1 支持

  • 支持 Vue: @
  • 支持 ES6 模板字符串

4.2 屬性

如果一個標簽有多個屬性风秤,可使用 分行 或 逗號

// 1
el-button(v-if="ifShow" type="size" size="small" @click="doClidk") 點擊

// 2
el-button(v-if="ifShow",type="size",size="small",@click="doClidk") 點擊

// 3
el-button(v-if="ifShow"
                type="size"
                size="small"
                @click="doClick") 點擊

4.3 注釋

  • 單行
// 一些內(nèi)容
p foo
p bar

<!-- 一些內(nèi)容 -->
<p>foo</p>
<p>bar</p>
  • 不輸出注釋
//- 這行不會出現(xiàn)在結(jié)果中
p foo
p bar

<p>foo</p>
<p>bar</p>
  • 塊注釋
body
    //
        一堆
        文字
        進行中

<body>
    <!-- 一堆
         文字
         進行中 -->
</body>

4.4 符號

  • 管道文字( | ):向模板添加純文本
p
  | 管道符號總是在最開頭鳖目,
  | 不算前面的縮進。

<p>管道符號總是在最開頭唁情, 不算前面的縮進疑苔。
</p>
a ……用一個鏈接結(jié)束的句子
| 甫匹。

<a>……用一個鏈接結(jié)束的句子</a>甸鸟。
| 千萬別
|
button 按
|
| 我!

千萬別
<button>按</button> 我兵迅!
  • # [ ] 標簽嵌入
p.
  這是一個很長很長而且還很無聊的段落抢韭,還沒有結(jié)束,是的恍箭,非常非常地長刻恭。
  突然出現(xiàn)了一個 #[strong 充滿力量感的單詞],這確實讓人難以 #[em 忽視]。
p.
  使用帶屬性的嵌入標簽的例子:
  #[q(lang="es") ?Hola Mundo!]

<p>這是一個很長很長而且還很無聊的段落鳍贾,還沒有結(jié)束鞍匾,是的,非常非常地長骑科。 突然出現(xiàn)了一個 <strong>充滿力量感的單詞</strong>橡淑,這確實讓人難以 <em>忽視</em>。</p>
<p>使用帶屬性的嵌入標簽的例子:
  <q lang="es">?Hola Mundo!</q></p>
p
  | 如果我不用嵌入功能來書寫咆爽,一些標簽比如
  strong strong
  | 和
  em em
  | 可能會產(chǎn)生意外的結(jié)果梁棠。
p.
  如果用了嵌入,在 #[strong strong] 和 #[em em] 旁的空格就會讓我舒服多了斗埂。

<p>如果我不用嵌入功能來書寫符糊,一些標簽比如<strong>strong</strong>和<em>em</em>可能會產(chǎn)生意外的結(jié)果。</p>
<p>如果用了嵌入呛凶,在 <strong>strong</strong> 和 <em>em</em> 旁的空格就會讓我舒服多了男娄。</p>
  • .
// 大文本塊
p.
  使用常規(guī)的標簽可以讓您的代碼行短小精悍,
  但使用嵌入標簽會使代碼變得更 #[em 清晰易讀]把兔。
  ——如果您的標簽和文本之間是用空格隔開的沪伙。

<p>使用常規(guī)的標簽可以讓您的代碼行短小精悍, 但使用嵌入標簽會使代碼變得更 <em>清晰易讀</em>县好。 ——如果您的標簽和文本之間是用空格隔開的围橡。
</p>
// 純文本塊
div
  p This text belongs to the paragraph tag.
  br
  .
    This text belongs to the div tag.

<div>
  <p>This text belongs to the paragraph tag.</p><br/>This text belongs to the div tag.</div>
  • : 塊展開
a: img

<a><img/></a>
  • / 自閉和標簽
foo/
foo(bar='baz')/

<foo/>
<foo bar="baz" />

5 后 記

感謝支持。

若不足之處缕贡,歡迎大家指出翁授,共勉。

如果覺得不錯晾咪,記得 點贊收擦,謝謝大家 ????

歡迎關(guān)注。

5.1 原文地址

https://xrkffgg.github.io/Knotes/blog/15.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谍倦,一起剝皮案震驚了整個濱河市塞赂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昼蛀,老刑警劉巖宴猾,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叼旋,居然都是意外死亡仇哆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門夫植,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讹剔,“玉大人,你說我怎么就攤上這事⊙忧罚” “怎么了陌兑?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長由捎。 經(jīng)常有香客問我诀紊,道長,這世上最難降的妖魔是什么隅俘? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任邻奠,我火速辦了婚禮,結(jié)果婚禮上为居,老公的妹妹穿的比我還像新娘碌宴。我一直安慰自己,他們只是感情好蒙畴,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布贰镣。 她就那樣靜靜地躺著,像睡著了一般膳凝。 火紅的嫁衣襯著肌膚如雪碑隆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天蹬音,我揣著相機與錄音上煤,去河邊找鬼。 笑死著淆,一個胖子當著我的面吹牛劫狠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播永部,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼独泞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苔埋?” 一聲冷哼從身側(cè)響起懦砂,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎组橄,沒想到半個月后荞膘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晨炕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年衫画,在試婚紗的時候發(fā)現(xiàn)自己被綠了毫炉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓮栗。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出费奸,到底是詐尸還是另有隱情弥激,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布愿阐,位于F島的核電站微服,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缨历。R本人自食惡果不足惜以蕴,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辛孵。 院中可真熱鬧丛肮,春花似錦、人聲如沸魄缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冶匹。三九已至习劫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚼隘,已是汗流浹背诽里。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留飞蛹,地道東北人须肆。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像桩皿,于是被迫代替她去往敵國和親豌汇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Beetl2.7.16中文文檔 Beetl作者:李家智 <xiandafu@126.com> 1. 什么是Beet...
    西漠閱讀 2,679評論 0 0
  • 今天和媽媽逛街泄隔,買了兩件羽絨服拒贱,兩個毛衣,逛街真爽佛嬉,有錢的日子真好逻澳。 吃了心心念念的糖葫蘆,有點酸暖呕,差評斜做。 減肥,...
    不在進行的ing閱讀 255評論 0 0
  • 不管是身邊的小孩子還是親子真人秀的小明星湾揽,我們都不難發(fā)現(xiàn)他們一舉一動和其身邊人有多么的相似瓤逼,就好像一面鏡子笼吟,若是學...
    遄飛丙玉閱讀 165評論 0 2
  • (文/舒 天) 關(guān)注海藍博士的微信公眾號后贷帮,覺得這是一個很有智慧很堅強的女人,讀到她厚積薄發(fā)的著作《不完美诱告,才美》...
    舒天閱讀 1,752評論 0 6