1.目录构建规范

project-name
|—- public 项目公共目录
| |—-favicon.ico Favourite 图标
| |—-index.html 页面入口 HTML 模板
| |—-manifest.json
| |—-robots.txt
|—- src 项目源码文件
| |—-assets 静态资源目录,公共的静态资源,图片,字体等
| |—-common 公共脚本,样式,配置,等动态信息
| | |—- font
| | |—- portrait.styl
| |—-components 公共组件目录
| | |—- Common
| | | |—- Calendar
| | | | |—- Calendar.vue 日历组件
| | | |—- Scroll
| | | | |—- Scroll.vue 局部内容滚动组件

| |—-config
| | |—- api.js
| | |—- api-user.js
| | |—- scene.js
| | |—- setting.js
| | |—- user.js
| |—-plugins 插件
| | |—- ant-design-vue.js
| | |—- vuetify.js
| |—-router 前端路由
| | |—- router.js
| |—-store 数据中心
| | |—- state.js state 数据源,数据定义
| | |—- mutations.js 同步修改 state 数据的方法定义

| | |—- actions.js 异步修改 state 数据的方法定义
| | |—- getters.js 获取数据的方法定义
| | |—- index.js 数据中心入口文件
| |—-util
| | |—- base.js
| | |—- time.js
| | |—- validate.js
| |—-views 页面目录,所有业务逻辑的页面都应该放这里
| | |—- index 应用首页
| | | |—- index.vue

| |—-App.vue 根组件
| |—-main.js 入口js文件
| |—-registerServiceWorker.js
|—- tests **
| |—-unit
| | |—- .eslintrc.js
| |—-setup.js
|—- **.browserslistrc
|—- **.editorconfig
|—- **.env Vue全局默认配置
|—- **.env.staging
|—- .eslintrc.js **Eslint 配置文件
|—- .**gitignore Git 忽略文件
|—- **.prettierrc
|—- **babel.config.js
|—- **jest.config.js
|—- **package.json 包依赖文件|—- package-lock.json 依赖包版本管理文件
|—- **postcss.config.js
|—- **README.md 项目介绍
|—- vue.config.js vue/cli 项目脚手架配置
|—- **yarn.lock

2.src 文件说明

  • assets: 放置静态资源,包括公共的 css 文件、 js 文件、iconfont 字体文件、img 图片文件 以及其他资源类文件。之所以强调是公共的 css 文件,是因为要在组件的 css 标签里加入 ‘scoped‘ 标记,将其作用范围限制在此组件以及调用它的父级组件中,避免污染全局样式;
  • common:公共的动态的脚本、样式。在实际中,样式可能是各种预处理语言写的,请自行组织目录结构。
  • components:放置通用模块组件。项目里总会有一些复用的组件,例如弹出框、发送手机验证码、图片上传等,将它们作为通用组件,避免重复工作;
  • config: 放置与后台 api 相关的文件。这里面有 axios 库的实例配置文件、使用配置的 axios 实例接入 api 获取数据的函数的集合的文件;
  • mixins: 放置混合选项的文件。具体来说,相当于是公用函数的集合,在组件中引用时,可以作用于组件而不必书写重复的方法;
  • plugins:放置插件的文件。例如ant-design-vue.js和vuetify.js;
  • router: 放置路由设置文件,指定路由对应的组件;
  • store: 数据中心。放置 vuex 需要的状态关联文件,设置公共的 state、mutations 等;
  • util:放常用的函数。
  • views: 所有业务逻辑的页面。例如登录页、用户信息页等。通常是这里的组件本身写入一些结构,再引入通用模块组件,形成完整的页面;
  • App.vue: 入口组件,pages 里的组件会被插入此组件中,此组件再插入 index.html 文件里,形成单页面应用;
  • main.js: 入口 js 文件,影响全局,作用是引入全局使用的库、公共的样式和方法、设置路由等。

3.组件/实例的选项顺序

  1. <script>
  2. export default {
  3. name: 'ExampleName', // 这个名字推荐:大写字母开头驼峰法命名。
  4. props: {}, // Props 定义。
  5. components: {}, // 组件定义。
  6. directives: {}, // 指令定义。
  7. mixins: [], // 混入 Mixin 定义。
  8. data () { // Data 定义。
  9. return {
  10. dataProps: '' // Data 属性的每一个变量都需要在后面写注释说明用途
  11. }
  12. },
  13. computed: {}, // 计算属性定义。
  14. created () {}, // 生命钩子函数,按照他们调用的顺序。
  15. mounted () {}, // 挂载到元素。
  16. activated () {}, // 使用 keep-alive 包裹的组件激活触发的钩子函数。
  17. deactivated () {}, // 使用 keep-alive 包裹的组件离开时触发的钩子函数。
  18. watch: {}, // 属性变化监听器。
  19. methods: { // 组件方法定义。
  20. publicbFunction () {} // 公共方法的定义,可以提供外面使用
  21. _privateFunction () {} // 私有方法,下划线定义,仅供组件内使用。
  22. }
  23. }
  24. </script>

4.元素特性的顺序

  1. 定义 (提供组件的选项)

    is

  2. 列表渲染 (创建多个变化的相同元素)

    v-for

  3. 条件渲染 (元素是否渲染/显示)

v-if / v-else-if / v-else / v-show / v-cloak
(v-cloak :设置样式指令,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除。可用于解决屏幕闪动)

  1. 渲染方式 (改变元素的渲染方式)

v-pre / v-once
(v-once:只渲染DOM第一次渲染的值,以后不会改变了)
(v-pre:不和绑定的数据冲突,用于对数据做原封不动的展示,例下:)

<div id="app">
    <h2 >{{message}}</h2>
    <h2 v-pre>{{message}}</h2>
</div>

<script>
  const app = new Vue({
    el : '#app',
    data : {
      message:"你好啊",

    }
  })
</script>

显示如下:
image.png

  1. 全局感知 (需要超越组件的知识)

id

  1. 唯一的特性 (需要唯一值的特性)

ref / key / slot

  1. 双向绑定 (把绑定和事件结合起来)

v-model

  1. 其它特性 (所有普通的绑定或未绑定的特性)
  2. 事件 (组件事件监听器)

v-on

  1. 内容 (覆写元素的内容)

v-html / v-text

<div id="app">
    <h2 >{{message}}</h2>
    <h2 v-text="message"></h2>
</div>
<script>
  const app = new Vue({
    el : '#app',
    data : {
      message:"你好啊",

    }
  })
</script>

// {{ message }} 与v-text=“message” 两种写法效果一致,
// 但是 {{ message }} 这种方式在网络较慢的情况下,
// 会出现不友好的页面显示方式, 所以推荐 v-text 这种写法
<div id="app">
    <h2 v-html="message"></h2>
    <h2 v-text="message"></h2>
</div>
<script>
  const app = new Vue({
    el : '#app',
    data : {
      message:"你好啊",

    }
  })
</script>

// 在语句中存在标签的情况下,v-text会将标签解析为文本;所以要用 v-html 这种写法

效果如下:
image.png

5.事件的控制

  • 不要使用 this.parent / this.root 进行控制, 会导致流程难以跟踪. 可使用事件中心进行代替.
  • 事件中心每添加事件, 需要注明事件的 名称 / 来源文件 / 流向文件, 以及事件的作用.
  • 事件移除时需要移除事件中心对应事件注明.
  • 组件当中有原生绑定事件, 注意在组建注销前进行移除