Vue入门(二)

Vue入门(二)


  这一节我们将通过阅读Demo项目的源代码,了解Vue项目的基本构成。

  只有了解了这些,我们才有能力编写自己的案例。

  之后我们通过命令“npm run build”,构建Vue项目,观察生成的构建结果,更深入地了解项目。


  一、Vue项目的基本构成


  1. src目录


  开发者编写的代码都放在src目录下。

  Demo项目的src目录结构如下图所示:




  各文件和目录说明如下:

  • main.js文件:App首页的主要文件,根目录下的index.html文件只是一个空壳,其内容都由这个JS文件动态填充生成。
  • App.vue文件:App首页的主要文件,App组件是整个App中最重要的一个组件,或者说是根组件,由main.js负责渲染,并填充入index.html中。
  • assets目录:存放资源文件,如样式表、图片、音频、视频等。
  • components目录:存放其它组件。
  • router目录:存放路由配置。


  2. main.js


  代码如下:


import Vue from 'vue' // 导入vue模块
import App from './App' // 导入App.vue,.vue可以省略
import router from './router' // 导入router目录下的index.js文件,省略文件名时,会自动查找index.js

Vue.config.productionTip = false // 阻止Vue在启动时生成生产提示

new Vue({ // 实例化Vue对象
  el: '#app', // el用于指定Vue组件被加载到哪个HTML元素中
  router, // 指定路由
  components: { App }, // 指定组件
  template: '<App/>' // 模板默认替换挂载元素。如果replace选项为false,模板将插入挂载元素内。
})


  new Vue()时,会把components中指定的组件渲染出来,并填充入el指定的HTML元素中。


  3. App.vue


  代码如下:


<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: "App"
};
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>


  一个组件是实现特定功能的可复用的页面模块,例如手机中常见的通讯录,就是一个组件。


  一个Vue组件由三部分构成:


  • template:模板。模板部分包含组件的HTML代码。
  • script:脚本。脚本部分定义组件类的数据和操作。
  • style:样式表。样式表部分定义组件的CSS代码。


  这里有一个手机中弹出提示(Toast)的组件代码,大家可以看一下:


<template>
<transition name="bounce">
    <div class="toast" :class="{'hidden': !visiable}"> <!-- 使用:[属性名]的方式可以设置动态属性 -->
        <i class="message">{{message}}</i> <!-- 使用{{[表达式]}}的方式可以显示组件的数据 -->
        <i class="icon icon-tuichu" @click="closeToast"></i> <!-- 使用@[事件名]的方式可以指定事件的处理方法,方法定义在脚本中 -->
    </div>
</transition>
</template>

<script>
export default {
  data() { // data:定义组件的数据,即组件内部的变量,注意这里的格式不是“data: {}”,而是函数“data() {}”
    return {
      message: "提示消息",
      visiable: true
    };
  },
  methods: { // methods:定义组件的方法
    closeToast: function() {
      this.close();
    }
  }
};
</script>

<style scoped lang="less">
@import url("../assets/css/variable.less");
@import url("../assets/css/public.less");
/* 省略样式表 */
</style>

  4. router/index.js


import Vue from 'vue' // 导入vue模块
import Router from 'vue-router' // 导入vue-router模块
import HelloWorld from '@/components/HelloWorld' // 导入组件HelloWorld,@指代src目录

Vue.use(Router) // 使用路由器组件

export default new Router({ // 创建一个路由器对象
  routes: [ // routes是一张路由表,将路径与组件映射在一起
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})


  二、构建结果


  运行“npm run build”,观察dist目录下的构建结果。




  1. 构建完成后,就看不到.vue文件了,只有img、css、js等几个目录了。

  2. 以组件为单位生成相应的.css和.js文件,例如App.vue,就生成了app.[随机字符].css和app.[随机字符].js。

  3. Webpack会把较小的图片编码成BASE64编码,直接写入.js文件中。

  4. .js文件是经过压缩处理的,比原来的尺寸小了很多。

  由于.js文件经过了压缩处理,所以如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。因此还为每个文件生成了一个map文件,有了map文件就可以像未加密的代码一样,准确的输出是哪一行哪一列有错了。

  如果你不想生成map文件,可以找到src/config/index.js文件,并将productionSourceMap改为false。

  5. Vue框架也生成了两个.js文件,一个是vendor.[随机字符].js,一个是manifest.[随机字符].js。可以认为vendor是Vue框架的主体部分,它的尺寸较大,而manifest是Vue框架中易变动的部分,所以把它独立出来,它的尺寸较小。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值