Представляем Pug и используем его во Vue

Vue.js

1. Введение

pugЭто интерфейсный механизм шаблонов, ранее известный какjade

Может быть использован для генерацииHTML, который пишется какCSS

китайский документ

Вот лишь некоторые 🌰

#hello
<div id="hello"></div>
a.link-button Link
<a class="link-button">Link</a>
a(href="https://xrkffgg.github.io/Knotes/") 我的网站
<a href="https://xrkffgg.github.io/Knotes/">我的网站</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 Примечания

  • одна линия
// 一些内容
p foo
p bar
<!-- 一些内容 --> <p>foo</p> <p>bar</p>
  • Не выводить комментарии
//- 这行不会出现在结果中
p foo
p bar
<p>foo</p> <p>bar</p>
  • заблокировать комментарий
body
  //
    一堆
    文字
    进行中
<body> <!-- 一堆 文字 进行中 --> </body>

4.4 Символы

  • трубный литерал (|): добавить в шаблон простой текст
p
  | 管道符号总是在最开头,
  | 不算前面的缩进。
<p>管道符号总是在最开头, 不算前面的缩进。 </p>
a ……用一个链接结束的句子
| 。
<a>……用一个链接结束的句子</a>。
| 千万别
|
button 按
|
| 我!
千万别 <button>按</button> 我!
  • # [ ]Встраивание тегов
p.
  这是一个很长很长而且还很无聊的段落,还没有结束,是的,非常非常地长。
  突然出现了一个 #[strong 充满力量感的单词],这确实让人难以 #[em 忽视]。
p.
  使用带属性的嵌入标签的例子:
  #[q(lang="es") ¡Hola Mundo!]
<p>这是一个很长很长而且还很无聊的段落,还没有结束,是的,非常非常地长。 突然出现了一个 <strong>充满力量感的单词</strong>,这确实让人难以 <em>忽视</em>。</p> <p>使用带属性的嵌入标签的例子: <q lang="es">¡Hola Mundo!</q></p>
p
  | 如果我不用嵌入功能来书写,一些标签比如
  strong strong
  | 和
  em em
  | 可能会产生意外的结果。
p.
  如果用了嵌入,在 #[strong strong] 和 #[em em] 旁的空格就会让我舒服多了。
<p>如果我不用嵌入功能来书写,一些标签比如<strong>strong</strong>和<em>em</em>可能会产生意外的结果。</p> <p>如果用了嵌入,在 <strong>strong</strong> 和 <em>em</em> 旁的空格就会让我舒服多了。</p>
  • .
// 大文本块
p.
  使用常规的标签可以让您的代码行短小精悍,
  但使用嵌入标签会使代码变得更 #[em 清晰易读]。
  ——如果您的标签和文本之间是用空格隔开的。
<p>使用常规的标签可以让您的代码行短小精悍, 但使用嵌入标签会使代码变得更 <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 Постскриптум

Спасибо за поддержку.

Если есть какие-то недостатки, пожалуйста, указывайте на них и поощряйте друг друга.

Если вы считаете, что это хорошо, не забудьте поставить лайк, спасибо ʚ💖ɞ

Добро пожаловать, чтобы обратить внимание.

5.1 Исходный адрес

Sunflower Scenery.GitHub.IO/K notes/blog…