Vue之项目搭建

摘要:
常用命令:npminstall-g包名#安装模块-g表示全局安装,如果没有-g,则表示在当前项目安装npmlist#查看当前目录下已安装的node包npmview包名engines#查看包所依赖的Node的版本npmoutdated#检查包是否已经过时,命令会列出所有已过时的包npmupdate包名#更新node包npmuninstall包名#卸载node包npm命令-h  4,安装Vue-cli直接在cmd中输入:npminstall-gvue-cli  二、使用Vue-CLI创建项目例如我想d盘的data文件夹下创建一个vue项目,于是我们打开cmd,来到d盘下的data目录输入:vueinitwebpack项目名访问提供的地址:项目创建完成。

  一、Vue自动化工具的安装

nvm:nodejs 版本管理工具。
也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本。
nodejs:在项目开发时的所需要的代码库
npm:nodejs 包管理工具。
在安装的 nodejs 的时候,npm 也会跟着一起安装,它是包管理工具。
npm 管理 nodejs 中的第三方插件

  1,安装nvm

它是一个node管理工具,当我们的电脑上有多个node版本时,nvm可以帮我们切换node版本。

下载地址:https://github.com/coreybutler/nvm-windows/releases

下载下来后解压安装就可以了,然后配置环境变量:我是解压在d盘的tool文件夹下,

Vue之项目搭建第1张

常用的nvm命令:直接在cmd中输入

nvm list                            #列出目前在nvm里面安装的所有node版本
nvm install node版本号            #安装指定版本的node.js
nvm uninstall node版本号         #卸载指定版本的node.js
nvm use node版本号                #切换当前使用的node.js版本

  2,安装node

由于我们已经安装上nvm,所以我们就可以借助nvm安装node,由于install默认是从国外下载,所以速度有可能会慢,我们可以把使用国内的镜像,这样速度就会快点,于是我们需要修改nvm文件夹下的settings.txt文件,

arch: 64proxy: none
node_mirror: http://npm.taobao.org/mirrors/node/npm_mirror: https://npm.taobao.org/mirrors/npm/
只需要在settings.txt文件下加上这四行代码既可

在cmd中输入:nvm install node版本号就行了

  3,安装npm

在安装node完成后,会同时帮我们安装一个包管理器npm,所以在上面安装node的时候就已经帮我们安装好npm了。npm就相当于python的pip,可以通过npm命令来安装node的包。常用命令:

npm install -g 包名              #安装模块   -g表示全局安装,如果没有-g,则表示在当前项目安装
npm list                        #查看当前目录下已安装的node包
npm view 包名 engines            #查看包所依赖的Node的版本 
npm outdated                    #检查包是否已经过时,命令会列出所有已过时的包
npm update 包名                  #更新node包
npm uninstall 包名               #卸载node包
npm 命令 -h      

  4,安装Vue-cli

直接在cmd中输入:npm install -g vue-cli

  二、使用Vue-CLI创建项目

例如我想d盘的data文件夹下创建一个vue项目,于是我们打开cmd,来到d盘下的data目录输入:vue init webpack 项目名

Vue之项目搭建第2张

Vue之项目搭建第3张

Vue之项目搭建第4张

Vue之项目搭建第5张

Vue之项目搭建第6张

访问提供的地址:

Vue之项目搭建第7张

项目创建完成。

//生成一个基于 webpack 模板的新项目
vue init webpack 项目名

//启动开发服务器 
cd myproject
npm run dev           #运行这个命令就可以启动node提供的测试http服务器
ctrl+c 停止服务器

  三、项目目录结构和执行流程

  1,目录结构

用pycharm打开项目:

Vue之项目搭建第8张

src   主开发目录,要开发的单文件组件全部在这个目录下的components目录下

static 静态资源目录,所有的css,js文件放在这个文件夹

dist项目打包发布文件夹,最后要上线单文件项目文件都在这个文件夹中[后面打包项目,让项目中的vue组件经过编译变成js 代码以后,dist就出现了]

node_modules目录是node的包目录,

config是配置目录,

build是项目打包时依赖的目录

src/router   路由,后面需要我们在使用Router路由的时候,自己声明.

  2,执行流程

整个项目的主文件是index.html,index.html会引入src文件夹中的main.js文件,main.js文件会导入顶级单文件组件App.vue文件,App.vue文件会通过组件嵌套或者路由来引用components文件夹中的其他单文件组件。

Vue之项目搭建第9张

  四、初始化项目

  1,清除页面上默认存在的东西,还原得到一个空白的页面

1.1 删除helloworld组件

Vue之项目搭建第10张

1.2 清除App.vue下的样式

Vue之项目搭建第11张

现在,再次打开地址,就是空白的:

Vue之项目搭建第12张

  2,安装路由vue-router

2.1 下载路由组件

要在本项目的目录下输入指令:npm install vue-router

2.2 配置路由

首先在src文件夹创建一个routers的文件夹,然后再routers文件夹下创建一个index.js文件,写入:

import Vue from "vue"
import Router from "vue-router"

//这里导入可以让让用户访问的组件

Vue.use(Router);

export default new Router({
  // 设置路由模式为‘history’,去掉默认的#
  mode: "history",
  routes:[
    //路由列表

  ]
})

其次是打开main.js文件,把router对象注册到vue中

Vue之项目搭建第13张

最后在App.vue组件,添加显示路由对应的内容

Vue之项目搭建第14张

这样,关于路由的配置就完成了,我们之后只需要在index.js文件中添加路由列表既可

  3、引入ElementUI

在之前的前端页面中我们使用过jQuery,bootstrap框架,在vue前端项目中,我们可以使用ElementUl框架,它和bootstrap一样的,别人已经写好的组件,我们直接拿来用既可,很方便。

3.1 快速安装elementUI

在本项目的目录下输入指令:npm install element-ui

3.2 配置elementUI

在main.js文件中写入:

Vue之项目搭建第15张

  4,引入axios

4.1 下载axios

在项目的目录下输入指令:npm install axios

4.2 配置axios

在main.js文件中,导入axios,并把它挂载到vue中

Vue之项目搭建第16张

  五、创建一个组件

  1,在components文件夹中创建一个后缀为vue的文件

Vue之项目搭建第17张

<template>
  <div>
    //在这写html
  </div>
</template>

<script>export default {
    name:'home',
    data:function () {
      return{
         //这里是data数据
      }
    }
  }
</script>

<style scoped>
//这里写css代码
</style>

  2,添加路由列表

在index.js文件中写入:

Vue之项目搭建第18张

  六、创建子组件,添加到其他组件中,完成组件嵌套

  1,也是要创建组件

只要是组件,其创建过程都是一样的,也要那三部分组成

Vue之项目搭建第19张

  2,把子组件引入到其他组件中,我把forms组件引入到tables组件中去

把子组件引入到其他组件中去,我们不需要对子组件做任何改动,只需要在父组件(即要引入子组件的组件)添加代码就行

Vue之项目搭建第20张

  七、效果

  1,代码

Vue之项目搭建第21张Vue之项目搭建第22张
<template>
  <div id="tables">
    <el-button type="primary" @click="add">添加</el-button>
    <table>
            <tr>
                <th>ID</th>
                <th>名称</th>
                <th>面积</th>
                <th>人口</th>
                <th>GDP</th>
                <th>操作</th>
            </tr>
            <tr v-for="value,key in tableData">
                <td>{{value.id}}</td>
                <td>{{value.name}}</td>
                <td>{{value.area}}</td>
                <td>{{value.population}}</td>
                <td>{{value.gdp}}</td>
                <td>
                    <el-button type="info" @click="edit(key)">编辑</el-button>
                    <el-button type="warning" @click="del(key)">删除</el-button>
                </td>
            </tr>
        </table>
    <forms :province="province" :state="state" :tableData="tableData" @cancel="is_show" :edit_key="edit_key"/>
  </div>
</template>

<script>
  import forms from './forms'export default {
    name:'tables',
    data:function () {
      return{
        tableData: [{
            id: 1,
            name: '广东',
            area: 20.3,
            population:5.3,
            gdp:5.5},],
        province:{},
        state:false,
        edit_key:-1}
    },
    components:{
      forms
    },
    created:function(){
      let _this=this;
      this.$axios.get('http://127.0.0.1:8000/homework/tables/')
    .then(function (response) {
            _this.tableData=response.data;
    })
    .catch(function (error) {
            console.log(error);
    });
    },
    methods:{
      add:function () {
        this.state=true
      },
      is_show:function (value) {
        this.state=!value;
        this.province={};
        this.edit_key=-1},
      edit:function (key) {
        this.state=true;
        this.edit_key=key;
        this.province=this.tableData[key]
      },
      del:function (key) {
        this.tableData.splice(key,1)
      }
    }
  }
</script>

<style scoped>
#tables{
1200px;
  margin: 0 auto;
}
table{
     1000px;
    border-collapse: collapse; /* 合并表格的边框 */}
tr{
    height: 42px;
}
table,td,th{
    border: 1px solid black;
  text-align: center;
}
</style>
tables.vue代码
Vue之项目搭建第23张Vue之项目搭建第24张
<template>
  <div id="forms" v-show="state">
    <div class="box">
      <el-row>
        <el-col :span="24">
          <label for="name">名称:</label>
          <input type="text" id="name" v-model="province.name">
        </el-col>
        <el-col :span="24">
          <label for="area">面积:</label>
          <input type="text" id="area" v-model="province.area">
        </el-col>
        <el-col :span="24">
          <label for="population">人口:</label>
          <input type="text" id="population" v-model="province.population">
        </el-col>
        <el-col :span="24">
          <label for="gdp">GDP:</label>
          <input type="text" id="gdp" v-model="province.gdp">
        </el-col>
        <el-col :span="24">
          <el-button type="success" @click="edit_key<0?add():save()">提交</el-button>
          <el-button type="danger" @click="cancel">取消</el-button>
        </el-col>
      </el-row>
    </div>

  </div>
</template>

<script>export default {
    name:'forms',
    props:['province','state','tableData','edit_key'],
    data:function () {
      return{

      }
    },
    methods:{
      add:function () {
        let value=0;
        if (this.tableData.length==0){
           value=1}
        else{
            value=this.tableData[this.tableData.length-1].id+1;
        }
        this.province['id']=value;
        this.tableData.push(this.province);
        this.cancel();
      },
      save:function(){
        this.cancel();
        let num=this.edit_key;
        this.tableData[num]=this.province
      },
      cancel:function () {
        this.$emit('cancel',this.state)
      }
    }
  }
</script>

<style scoped>
#forms{
   100%;
  height:100%;
  background-color: rgba(235,235,235,0.5);
  position: absolute;
  top: 0;
  left: 0;
}
.box{
  margin: 0 auto;
  margin-top: 200px;
   400px;
  height: 300px;
  background-color: white;
  padding: 20px 30px;
}
.box .el-col{
  margin-bottom: 20px;
}
.box input{
  300px ;
  height: 30px;
}
</style>
forms.vue代码

  2,效果图

Vue之项目搭建第25张

    上面完成了表格的增删改查功能。在tables组件中我用了axios向一个接口发送了请求,拿回很多省份的信息。tables组件和forms组件间实现了数据双向传递。从这个小小案例中基本反映出所有的功能,无论是多么大的页面,或者说有多少个组件;不管有多少个路由,你只需要添加路由列表和组件之间嵌套就可以实现任何东西了;任何组件都可以成为父组件,只要你往其中添加子组件就行;也都可以成为子组件,你只要把它添加到其他组件中既可;任何组件都也可以通过一个路由访问到,你只需给这个组件添加一个路由关系既可。

免责声明:文章转载自《Vue之项目搭建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UI Automator Viewer的使用Qt HWND的句柄与QWidget的转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EasyUI常用组件(基础)

---------------------------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处]文章出处:http://blog.csdn.net/sdksdk0/article/deta...

文件上传解析漏洞

上传漏洞 Mirror王宇阳 2019年10月28日 Web网站通常存在文件上传(例如:图片、文档、zip压缩文件^等)只要存在上传功能,就有可能会有上传漏洞的危机。和SQL注入漏洞相比较而言,上传漏洞更加危险,因为该漏洞可以直接上传一个WebShell到服务器上。 解析漏洞 利用上传漏洞,通常需要结合Web容器(IIS、Nginx、Apache、To...

linux如何安装声卡驱动

就Linux系统对硬件设备的支持特性而言,对声卡的支持是很糟糕的。不过现在好了,有两种驱动程序可以弥补Linux系统的不足。一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构)。OSS是一个商业声卡驱动程序,需要花钱购买,否则每次启动后,你只可以免费使用240分钟;ALSA是自由软件,可以免费使用。     一、安装OSS声卡驱动程序  ...

vue的main.js

import Vue from 'vue'; import App from './App.vue'; //================http 请求===========================// import request from './lib/request/request'; Vue.prototype.$request...

Ant命令总结

1 Ant是什么? Apache Ant 是一个基于 Java的生成工具。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本2 下载、安装Ant 安装Ant下载.zip...

Vue快速搭建项目

1. 安装node.js,这是最基础的环境; 2. 安装cnpm: npm install cnpm -g --registry=https://registry.npm.taobao.org 3. 全局安装vue-cli: cnpm install -g vue-cli 4. 安装vue-cli成功后,通过cd命令进入你想放置项目的文件夹,...