Brinque com o código | Compartilhe algum código prático de front-end do Vue (2)

Índice

Editar

2. Especificações do código

2.1 Vista

2.1.1 Estrutura do código

2.1.2 dados

2.1.3 suporte

2.1.4 calculado

2.1.5 Definir valores-chave para v-for

2.1.6 v-if e v-for são mutuamente exclusivos

2.1.7 Elementos com múltiplos atributos

2.1.8 Expressões simples em templates

2.1.9 Valores de atributos citados

2.1.10 Abreviação da instrução

2.2HTML

2.2.1 Modelo de arquivo

2.2.2 Fechamento de elemento e rótulo

2.2.3 Aninhamento de código

2.3CSS

2.3.1 Arquivos de estilo

2.3.2 Formatação de código

2.3.3 Caso de código

2.3.4 Legibilidade do código

2.3.5 Aspas para valores de atributos

2.3.6 Sugestões para escrita de atributos

3.3.7 Prefixo privado do navegador CSS3

2.4JavaScript

2.4.1 Blocos de código de linha única

2.4.2 Estilo de chaveta

2.4.3 Espaços no código


2. Especificações do código

2.1 Vista

2.1.1 Estrutura do código

<template>
  <div id="my-component">
    <DemoComponent />
  </div>
</template>

<script>
import DemoComponent from '../components/DemoComponent'

export default {
  name: 'MyComponent',
  components: {
    DemoComponent
  },
  mixins: [],
  props: {},
  data () {
    return {}
  },
  computed: {},
  watch: {}
  created () {},
  mounted () {},
  destroyed () {},
  methods: {},
}
</script>

<style lang="scss" scoped>
#my-component {
}
</style>

2.1.2 dados

O componente  data deve ser uma função.

// In a .vue file
export default {
  data () {
    return {
      foo: 'bar'
    }
  }
}

2.1.3 suporte

As definições de prop devem ser tão detalhadas quanto possível.

export default {
  props: {
    status: {
      type: String,
      required: true,
      validator: function (value) {
        return [
          'syncing', 
          'synced',
          'version-conflict',
          'error'
        ].indexOf(value) !== -1
      }
    }
  }
}

2.1.4 calculado

Propriedades computadas complexas devem ser divididas em tantas propriedades mais simples quanto possível.  Propriedades computacionais pequenas e focadas reduzem as suposições sobre o uso da informação, portanto, é necessária menos refatoração quando os requisitos mudam.

// bad
computed: { 
  price: function () { 
    var basePrice = this.manufactureCost / (1 - this.profitMargin) 
    return ( 
      basePrice - 
      basePrice * (this.discountPercent || 0) 
    ) 
  } 
}

// good
computed: {
  basePrice: function () {
    return this.manufactureCost / (1 - this.profitMargin)
  },
  discount: function () {
    return this.basePrice * (this.discountPercent || 0)
  },
  finalPrice: function () {
    return this.basePrice - this.discount
  }
}

2.1.5 Para  v-for definir o valor da chave

As colocações devem ser usadas em componentes  key para v-for manter o estado do componente interno e suas subárvores. Mantenha até mesmo um comportamento previsível em elementos, como constância de objetos em animações .

<ul>
  <li
    v-for="todo in todos"
    :key="todo.id">
      {
   
   { todo.text }}
  </li>
</ul>
 
 

2.1.6  v-if e  v-for exclusão mútua

Nunca  use ambos v-if e  v-for no mesmo elemento.

<!-- bad:控制台报错 -->
<ul>
  <li
    v-for="user in users"
    v-if="shouldShowUsers"
    :key="user.id">
      {
   
   { user.name }}
  </li>
</ul>

Geralmente tendemos a fazer isso em duas situações comuns:

  • Para filtrar itens em uma lista (por exemplo  v-for="user in users" v-if="user.isActive"). Nesse caso,  users substitua por uma propriedade computada (por exemplo  activeUsers) que retorne a lista filtrada.
computed: {
  activeUsers: function () {
    return this.users.filter((user) => {
      return user.isActive
    })
  }
}
<ul>
  <li
    v-for="user in activeUsers"
    :key="user.id">
      {
   
   { user.name }}
  </li>
</ul>
  • Para evitar renderizar uma lista que deveria estar oculta (por exemplo  v-for="user in users" v-if="shouldShowUsers"). Neste caso,  v-if mova-o para o elemento contêiner (por exemplo  ulol).
    <!-- bad -->
    <ul>
      <li
        v-for="user in users"
        v-if="shouldShowUsers"
        :key="user.id">
          {
         
         { user.name }}
      </li>
    </ul>
    
    <!-- good -->
    <ul v-if="shouldShowUsers">
      <li
        v-for="user in users"
        :key="user.id">
          {
         
         { user.name }}
      </li>
    </ul>

2.1.7 Elementos com múltiplos atributos

Elementos com múltiplos atributos devem ser escritos em múltiplas linhas, uma linha para cada atributo.

<!-- bad -->
<img src="https://vuejs.org/images/logo.png" alt="Vue Logo">
<MyComponent foo="a" bar="b" baz="c"/>

<!-- good -->
<img
  src="https://vuejs.org/images/logo.png"
  alt="Vue Logo">

<MyComponent
  foo="a"
  bar="b"
  baz="c"/>

2.1.8 Expressões simples em templates

Os modelos de componentes devem conter apenas expressões simples e expressões complexas devem ser refatoradas em propriedades ou métodos computados.

Expressões complexas tornam seus modelos menos declarativos. Deveríamos tentar descrever o que deveria aparecer , e não como calcular esse valor. E propriedades e métodos computados tornam o código reutilizável.

// bad
{
   
   {
  fullName.split(' ').map((word) => {
    return word[0].toUpperCase() + word.slice(1)
  }).join(' ')
}}

Melhor abordagem:

<!-- 在模板中 -->
{
   
   { normalizedFullName }}

// 复杂表达式已经移入一个计算属性
computed: {
  normalizedFullName: function () {
    return this.fullName.split(' ').map(function (word) {
      return word[0].toUpperCase() + word.slice(1)
    }).join(' ')
  }
}

2.1.9 Valores de atributos citados

Os valores de atributos HTML não vazios devem sempre ser colocados entre aspas duplas.

<!-- bad -->
<input type=text>
<AppSidebar :style={width:sidebarWidth+'px'}>
<!-- good -->
<input type="text">
<AppSidebar :style="{ width: sidebarWidth + 'px' }">

2.1.10 Abreviação da instrução

  • : expresso  por v-bind:
  • @ expresso  por v-on:
  • # expresso  por v-slot:
<input
  :value="newTodoText"
  :placeholder="newTodoInstructions">

<input
  @input="onInput"
  @focus="onFocus">

<template #header>
  <h1>Here might be a page title</h1>
</template>

<template #footer>
  <p>Here's some contact info</p>
</template>

2.2HTML

2.2.1 Modelo de arquivo

Modelo de arquivo HTML5:

<!DOCTYPE html>
  <html lang="zh-CN">
  <head>
    <meta charset="UTF-8">
    <title>HTML5标准模版</title>
  </head>
  <body>
  </body>
</html>

Versão móvel:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
    <meta name="format-detection" content="telephone=no">
    <title>移动端HTML模版</title>

    <!-- S DNS预解析 -->
    <link rel="dns-prefetch" href="">
    <!-- E DNS预解析 -->

    <!-- S 线上样式页面片,开发请直接取消注释引用 -->
    <!-- #include virtual="" -->
    <!-- E 线上样式页面片 -->

    <!-- S 本地调试,根据开发模式选择调试方式,请开发删除 -->
    <link rel="stylesheet" href="css/index.css">
    <!-- /本地调试方式 -->

    <link rel="stylesheet" href="http://srcPath/index.css">
    <!-- /开发机调试方式 -->
    <!-- E 本地调试 -->

</head>
<body>
</body>
</html>
 
 

Versão para PC:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="keywords" content="your keywords">
    <meta name="description" content="your description">
    <meta name="author" content="author,email address">
    <meta name="robots" content="index,follow">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="renderer" content="ie-stand">
    <title>PC端HTML模版</title>

    <!-- S DNS预解析 -->
    <link rel="dns-prefetch" href="">
    <!-- E DNS预解析 -->

    <!-- S 线上样式页面片,开发请直接取消注释引用 -->
    <!-- #include virtual="" -->
    <!-- E 线上样式页面片 -->

    <!-- S 本地调试,根据开发模式选择调试方式,请开发删除 -->
    <link rel="stylesheet" href="css/index.css">
    <!-- /本地调试方式 -->

    <link rel="stylesheet" href="http://srcPath/index.css">
    <!-- /开发机调试方式 -->
    <!-- E 本地调试 -->
</head>
<body>
</body>
</html>
 
 

2.2.2 Fechamento de elemento e rótulo

Existem cinco tipos de elementos HTML:

  • 空元素: área、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr
  • Elementos do texto original: roteiro, estilo
  • Elementos RCDATA: área de texto, título
  • Elementos estrangeiros: elementos do namespace MathML e namespace SVG
  • Elementos regulares: outros elementos permitidos pelo HTML são chamados de elementos regulares

Para permitir que os navegadores analisem melhor o código e tornem-no mais legível, existem as seguintes convenções:

  • Todos os elementos com tags de início e de fim devem ser escritos com tags de início e de fim, e alguns elementos que permitem a omissão de tags de início ou de pacote também devem ser escritos.
  • Tags de elementos vazios não incluem o caractere "/".
    <!-- good -->
    <div>
        <h1>我是h1标题</h1>
        <p>我是一段文字,我有始有终,浏览器能正确解析</p>
    </div>
    	
    <br data-tomark-pass>
    
    <!-- bad -->
    <div>
        <h1>我是h1标题</h1>
        <p>我是一段文字,我有始无终,浏览器亦能正确解析
    </div>
    
    <br/>

2.2.3 Aninhamento de código

Especificações de aninhamento de elementos, cada elemento de bloco está em sua própria linha e os elementos embutidos são opcionais.

<!-- good -->
<div>
    <h1></h1>
    <p></p>
</div>	
<p><span></span><span></span></p>

<!-- bad -->
<div>
    <h1></h1><p></p>
</div>	
<p> 
    <span></span>
    <span></span>
</p>

Elementos de parágrafo e elementos de título só podem aninhar elementos embutidos.

<!-- good -->
<h1><span></span></h1>
<p><span></span><span></span></p>

<!-- bad -->
<h1><div></div></h1>
<p><div></div><div></div></p>

2.3CSS

2.3.1 Arquivos de estilo

O arquivo de estilo deve ser escrito com  @charset regras e deve ser escrito a partir do primeiro caractere da primeira linha do arquivo de estilo, e o nome da codificação é usado  “UTF-8”.

  • recomendo:
@charset "UTF-8";
.jdc {}
  • Não recomendado:
/* @charset规则不在文件首行首个字符开始 */
@charset "UTF-8";
.jdc {}

/* @charset规则没有用小写 */
@CHARSET "UTF-8";
.jdc {}

/* 无@charset规则 */
.jdc {}

2.3.2 Formatação de código

Geralmente existem dois estilos de escrita: um é o formato compacto (Compact) e o outro é o formato expandido (Expanded).

  • Recomendado: formato expandido
.jdc {
  display: block;
  width: 50px;
}
  • Não recomendado: Formato compacto (Compacto)
.jdc { display: block; width: 50px;}

2.3.3 Caso de código

Seletores de estilo, nomes de atributos e palavras-chave de valor de atributo são todos escritos em letras minúsculas, e letras maiúsculas e minúsculas são permitidas em sequências de atributos.

  • recomendo:
.jdc {
  display: block;
}
  • Não recomendado:
.JDC {
  DISPLAY: BLOCK;
}

2.3.4 Legibilidade do código

  1. Há um espaço entre o colchete de abertura e o nome da classe e um espaço entre os dois pontos e o valor do atributo.
  • recomendo:
.jdc {
  width: 100%;
}
  • Não recomendado:
.jdc{
  width:100%;
}
  1. Valores separados por vírgula, seguidos de espaço.
  • recomendo:
.jdc {
  box-shadow: 1px 1px 1px #333, 2px 2px 2px #ccc;
}
  • Não recomendado:
.jdc {
  box-shadow: 1px 1px 1px #333,2px 2px 2px #ccc;
}
  1. Abre uma nova linha para um único seletor CSS ou nova declaração.
  • recomendo:
.jdc, .jdc_logo, .jdc_hd {
  color: #ff0;
}

.nav{
  color: #fff;
}
  • Não recomendado:
.jdc, .jdc_logo, .jdc_hd {
  color: #ff0;
}.nav{
  color: #fff;
}
  1. Não há espaços no valor da cor  rgb() rgba() hsl() hsla() rect() e o valor não deve conter 0s desnecessários.
  • recomendo:
.jdc {
  color: rgba(255,255,255,.5);
}
  • Não recomendado:
.jdc {
  color: rgba( 255, 255, 255, 0.5 );
}
  1. Se o valor hexadecimal do valor do atributo puder ser abreviado, use abreviações tanto quanto possível.
  • recomendo:
.jdc {
  color: #fff;
}
  • Não recomendado:
.jdc {
  color: #ffffff;
}
  1. Não  0 especifique unidades.
  • recomendo:
.jdc {
  margin: 0 10px;
}
  • Não recomendado:
.jdc {
  margin: 0px 10px;
}

2.3.5 Aspas para valores de atributos

Quando aspas são necessárias para valores de propriedades CSS, devem ser usadas aspas simples.

  • recomendo:
.jdc {
  font-family: 'Hiragino Sans GB';
}
  • Não recomendado:
.jdc {
  font-family: "Hiragino Sans GB";
}

2.3.6 Sugestões para escrita de atributos

Recomenda-se seguir a seguinte sequência:

  1. Propriedades de posicionamento de layout: display/position/float/clear/visibility/overflow
  2. Atributos próprios: largura/altura/margem/preenchimento/borda/fundo
  3. Propriedades do texto: cor/fonte/decoração de texto/alinhamento de texto/alinhamento vertical/espaço em branco/quebra de palavra
  4. Outras propriedades (CSS3): content/cursor/border-radius/box-shadow/text-shadow/background: linear-gradient…
.jdc {
  display: block;
  position: relative;
  float: left;
  width: 100px;
  height: 100px;
  margin: 0 10px;
  padding: 20px 0;
  font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
  color: #333;
  background: rgba(0,0,0,.5);
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -o-border-radius: 10px;
  -ms-border-radius: 10px;
  border-radius: 10px;
}

3.3.7 Prefixo privado do navegador CSS3

Os prefixos CSS3 específicos do navegador vêm primeiro e os prefixos padrão vêm em seguida.

.jdc {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -o-border-radius: 10px;
  -ms-border-radius: 10px;
  border-radius: 10px;
}

2.4JavaScript

2.4.1 Blocos de código de linha única

Use espaços em blocos de código de linha única.

  • Não recomendado:
function foo () {return true}
if (foo) {bar = 0}
  • recomendo:
function foo () { return true }
if (foo) { bar = 0 }

2.4.2 Estilo de chaveta

No processo de programação, o estilo de colchetes está intimamente relacionado ao estilo de recuo e há muitas maneiras de descrever a posição dos colchetes em relação ao bloco de código. Em JavaScript, existem três estilos principais, como segue:

  • 【Recomendado】Um verdadeiro estilo de cinta
if (foo) {
  bar()
} else {
  baz()
}
  • Stroustrup
if (foo) {
  bar()
}
else {
  baz()
}
  • Allman
if (foo)
{
  bar()
}
else
{
  baz()
}

2.4.3 Espaços no código

  1. Espaços antes e depois das vírgulas podem melhorar a legibilidade do código. A equipe concordou em usar espaços depois das vírgulas e nenhum espaço antes das vírgulas.
  • recomendo:
var foo = 1, bar = 2
  • Não recomendado:
var foo = 1,bar = 2

var foo = 1 , bar = 2

var foo = 1 ,bar = 2
  1. Não pode haver um espaço entre a chave e o valor de um objeto literal, e é necessário um espaço entre os dois pontos e o valor do objeto literal.
  • recomendo:
var obj = { 'foo': 'haha' }
  • Não recomendado:
var obj = { 'foo' : 'haha' }
  1. Adicione espaços antes dos blocos de código.
  • recomendo:
if (a) {
  b()
}

function a () {}
  • Não recomendado:
if (a){
  b()
}

function a (){}
  1. Deve haver um espaço antes dos parênteses de declaração da função.
  • recomendo:
function func (x) {
  // ...
}
  • Não recomendado
function func(x) {
  // ...
}
  1. Ao chamar uma função, os espaços são proibidos.
  • recomendo:
fn()
  • Não recomendado:
fn ()

fn
()
  1. Você precisa adicionar espaços antes e depois do operador.
  • recomendo:
var sum = 1 + 2
  • Não recomendado:
var sum = 1+2

Acho que você gosta

Origin blog.csdn.net/qq_22903531/article/details/132622223
Recomendado
Clasificación