组件名为多个单词

good

  1. Vue.component('todo-item', {
  2. // ...
  3. })
  4. export default {
  5. name: 'TodoItem',
  6. // ...
  7. }

no good

  1. Vue.component('todo', {
  2. // ...
  3. })
  4. export default {
  5. name: 'Todo',
  6. // ...
  7. }

这是为了避免与现在以及未来的html元素标签冲突,当然这里Vue的内置组件component、根组件App、过渡trasition除外

除根组件APP外,组件的data必须是一个函数

good

  1. Vue.component('some-comp', {
  2. data: function () {
  3. return {
  4. foo: 'bar'
  5. }
  6. }
  7. })
  1. // In a .vue file
  2. export default {
  3. data () {
  4. return {
  5. foo: 'bar'
  6. }
  7. }
  8. }

no good

  1. Vue.component('some-comp', {
  2. data: {
  3. foo: 'bar'
  4. }
  5. })
  1. export default {
  2. data: {
  3. foo: 'bar'
  4. }
  5. }

Prop的定义应该尽量详细

good

  1. props: {
  2. status: String
  3. }

excellent

  1. props: {
  2. status: { type: String, default: '' }
  3. }

wonderful

  1. props: {
  2. status: {
  3. type: String,
  4. required: true,
  5. validator: function (value) {
  6. return [
  7. 'syncing',
  8. 'synced',
  9. 'version-conflict',
  10. 'error'
  11. ].indexOf(value) !== -1
  12. }
  13. }
  14. }

no good

  1. props: ['status']

为v-for设置键值

good

  1. <ul>
  2. <li
  3. v-for="todo in todos"
  4. :key="todo.id"
  5. >
  6. {{ todo.text }}
  7. </li>
  8. </ul>

no good

  1. <ul>
  2. <li v-for="todo in todos">
  3. {{ todo.text }}
  4. </li>
  5. </ul>

避免v-if和v-for一起使用

good

  1. <ul>
  2. <li
  3. v-for="user in activeUsers"
  4. :key="user.id"
  5. >
  6. {{ user.name }}
  7. </li>
  8. </ul>

no good

  1. <ul>
  2. <li v-for="user in users"
  3. v-if="user.isActive"
  4. :key="user.id">
  5. {{ user.name }}
  6. </li>
  7. </ul>

因为v-for的优先级高于v-if

为组件样式设置作用域

good

  1. <template>
  2. <button class="button button-close">X</button>
  3. </template>
  4. <!-- 使用 `scoped` attribute -->
  5. <style scoped>
  6. .button {
  7. border: none;
  8. border-radius: 2px;
  9. }
  10. .button-close {
  11. background-color: red;
  12. }
  13. </style>

no good

  1. <template>
  2. <button class="btn btn-close">X</button>
  3. </template>
  4. <style>
  5. .btn-close {
  6. background-color: red;
  7. }
  8. </style>

根组件APP和布局组件layout的样式作用域可以是全局的,其它的都应该有作用域

私有的property名

good

  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. $_myGreatMixin_update: function () {
  5. // ...
  6. }
  7. }
  8. }

excellent

  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. publicMethod() {
  5. // ...
  6. myPrivateFunction()
  7. }
  8. }
  9. }
  10. function myPrivateFunction() {
  11. // ...
  12. }
  13. export default myGreatMixin

no good

  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. update: function () {
  5. // ...
  6. }
  7. }
  8. }
  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. _update: function () {
  5. // ...
  6. }
  7. }
  8. }
  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. $update: function () {
  5. // ...
  6. }
  7. }
  8. }
  1. var myGreatMixin = {
  2. // ...
  3. methods: {
  4. $_update: function () {
  5. // ...
  6. }
  7. }
  8. }

Components

  • 所有components下的文件应当以首字母大写(PascalCase)开头,index之类的文件名除外

Views

  • 代表路由的.vue文件或者文件夹用短横线连接(kebab-case)

All JS File

  • 所有js文件遵循短横线连接(kebab-case)
  • 变量命名应该具有语义,而不是瞎起名字
  • 函数、变量使用camelCase
  • 常量字母都大写
  • 字符串使用单引号
  • 字符串拼接使用模板字符串
  • 句尾加分号

template下的标签

原则上是当html拿来写

  1. <Select v-model="ojbk">
  2. <Option v-for="item in list">
  3. {{ item.name }}
  4. </Option>
  5. </Select>

但是直到我遇到iview,我发现楼上这样写在下拉选中的时候会换行,阿伊,阿伊,emmmmm,那就不要用html的写法去写了

这种看着也还行吧

  1. <Select v-model="ojbk">
  2. <Option
  3. v-for="item in list"
  4. >{{ item.name }}</Option>
  5. </Select>

不习惯那这样

  1. <Select v-model="ojbk">
  2. <Option v-for="item in list">{{ item.name }}</Option>
  3. </Select>

注意配置下编辑器的代码格式化风格,不然有可能白搞

  • html属性值使用双引号

组件名的顺序- 从右往左读

建议是从右往左读,看着清晰、简洁、明了, 比如说:

内部立项 Internal project approval
项目审批 Project approval

在命名的时候应该这样

  1. views/
  2. ApprovalProjectInternal.vue
  3. ApprovalPriject.vue
  4. 抑或是
  5. views/
  6. approval-project-internal.vue
  7. approval-project.vue

参考

vue.js风格指南:https://cn.vuejs.org/v2/style-guide/