vue的项目搭建demo

一、安装node环境

  1、下载地址为:https://nodejs.org/en/

  2、检查是否安装成功:如果输出版本号,说明我们安装node环境成功

  

  3、为了提高我们的效率,可以使用淘宝的镜像:http://npm.taobao.org/

  输入:npm install -g cnpm –registry=https://registry.npm.taobao.org,即可安装npm镜像,以后再用到npm的地方直接用cnpm来代替就好了。

  

  检查是否安装成功:

  

二、搭建vue项目环境

  1、全局安装vue-cli

  npm install --global vue-cli

  

  2、进入你的项目目录,创建一个基于 webpack 模板的新项目: vue init webpack 项目名

    

  说明:

    Vue build ==> 打包方式,回车即可;

    Install vue-router ==> 是否要安装 vue-router,项目中肯定要使用到 所以Y 回车;

    Use ESLint to lint your code ==> 是否需要 js 语法检测 目前我们不需要 所以 n 回车;

    Set up unit tests ==> 是否安装 单元测试工具 目前我们不需要 所以 n 回车;

    Setup e2e tests with Nightwatch ==> 是否需要 端到端测试工具 目前我们不需要 所以 n 回车;

  3、进入项目:cd vue-demo,安装依赖

  

  安装成功后,项目文件夹中会多出一个目录: node_modules

   

  4、npm run dev,启动项目

  项目启动成功:

  

三、vue项目目录讲解

  

  1、build:构建脚本目录

    1)build.js   ==>  生产环境构建脚本;

    2)check-versions.js   ==>  检查npm,node.js版本;

    3)utils.js   ==>  构建相关工具方法;

    4)vue-loader.conf.js   ==>  配置了css加载器以及编译css之后自动添加前缀;

    5)webpack.base.conf.js   ==>  webpack基本配置;

    6)webpack.dev.conf.js   ==>  webpack开发环境配置;

    7)webpack.prod.conf.js   ==>  webpack生产环境配置;

  2、config:项目配置

    1)dev.env.js   ==>  开发环境变量;

    2)index.js   ==>  项目配置文件;

    3)prod.env.js   ==>  生产环境变量;

  3、node_modules:npm 加载的项目依赖模块

  4、src:这里是我们要开发的目录,基本上要做的事情都在这个目录里。里面包含了几个目录及文件:

    1)assets:资源目录,放置一些图片或者公共js、公共css。这里的资源会被webpack构建;

    2)components:组件目录,我们写的组件就放在这个目录里面;

    3)router:前端路由,我们需要配置的路由路径写在index.js里面;

    4)App.vue:根组件;

    5)main.js:入口js文件;

  5、static:静态资源目录,如图片、字体等。不会被webpack构建

  6、index.html:首页入口文件,可以添加一些 meta 信息等

  7、package.json:npm包配置文件,定义了项目的npm脚本,依赖包等信息

  8、README.md:项目的说明文档,markdown 格式

  9、.xxxx文件:这些是一些配置文件,包括语法配置,git配置等

四、开始我们的第一个vue项目

  1、在components目录下新建一个views目录,里面写我们的vue组件

    1)开始我们的第一个组件:

    a:在views目录下新建First.vue

    b:在router目录下的index.js里面配置路由路径

    

     c:template 写 html,script写 js,style写样式

    

    d:输入ip: http://localhost:8010/#/first,查看页面效果

    

    注意:

    一个组件下只能有一个并列的 div,以下写法是错误:

    

    数据要写在 return 里面,而不是像文档那样子写,以下写法错误:

    

 

  2、讲讲父子组件

    1)在components目录下新建sub文件夹,用于存放一下可以复用的子组件。比如新建一个Confirm.vue组件

    

    3)在父组件中引入子组件

    引入:import Confirm from '../sub/Confirm'

    注册:在<script></script>标签内的 name代码块后面加上 components: {Confirm}

    使用:在<template></template>内加上<confirm></confirm>

    完整代码:

    

    2)父子组件通信

    子组件:

    

    父组件:

    

   3、使用路由搭建单页应用

    1)按照以上方法,新建一个Second.vue组件

    2)路由跳转:<router-link to="/second">去第二个页面</router-link>

    

    

    路由跳转之后,注意观察路径变化:

    

    可以看到,在html中解析成了a标签

    

    这里只是简单的介绍了一下路由的使用,更多详细信息,请前往官网学习:https://router.vuejs.org/zh-cn/

  4、如何用less写样式

    1)安装less依赖:npm install less less-loader --save

    

    安装成功之后,可在package.json中看到,多增加了2个模块:

    

    2)编写less

      

五、补充

  1、解决vue不能自动打开浏览器的问题:当我们输入npm run dev,运行项目,命令行提示我们运行成功,但是浏览器也没有自动打开,只能自己手动输入。

  解决:

    1)打开config  ==> index.js

    

    2)module.exports配置中找到autoOpenBrowser,默认设置的是false

    

    3)将autoOpenBrowser改为true

    

    4)Ctrl+C,然后我们重启一下,就能自动打开浏览器了

    

  2、为了避免端口冲突,也可以修改port,打开目录同上

    

    修改成功:

    

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 JFinal + Vuedemo 代码,仅供参考: ## JFinal 部分 ### Controller ```java public class UserController extends Controller { public void index() { render("index.html"); } public void getUsers() { List<User> userList = UserService.getAllUsers(); renderJson(userList); } public void addUser() { User user = getModel(User.class); boolean isSuccess = UserService.addUser(user); if (isSuccess) { renderJson(Result.success("添加成功")); } else { renderJson(Result.failure("添加失败")); } } public void deleteUser() { int userId = getParaToInt(); boolean isSuccess = UserService.deleteUser(userId); if (isSuccess) { renderJson(Result.success("删除成功")); } else { renderJson(Result.failure("删除失败")); } } } ``` ### Service ```java public class UserService { public static List<User> getAllUsers() { return Db.find("SELECT * FROM user"); } public static boolean addUser(User user) { return user.save(); } public static boolean deleteUser(int userId) { return Db.deleteById("user", "id", userId); } } ``` ## Vue 部分 ### index.html ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JFinal + Vue Demo</title> </head> <body> <div id="app"> <h1>User List</h1> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> <th>Gender</th> <th>Operation</th> </tr> </thead> <tbody> <tr v-for="user in userList" :key="user.id"> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.age }}</td> <td>{{ user.gender }}</td> <td><button @click="deleteUser(user.id)">Delete</button></td> </tr> </tbody> </table> <h1>Add User</h1> <form @submit.prevent="addUser"> <div> <label for="name">Name:</label> <input type="text" id="name" v-model="userName"> </div> <div> <label for="age">Age:</label> <input type="number" id="age" v-model="userAge"> </div> <div> <label for="gender">Gender:</label> <select id="gender" v-model="userGender"> <option value="male">Male</option> <option value="female">Female</option> </select> </div> <button type="submit">Add</button> </form> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> var app = new Vue({ el: '#app', data: { userList: [], userName: '', userAge: '', userGender: 'male' }, mounted: function() { this.getUsers(); }, methods: { getUsers: function() { axios.get('/users').then(response => { this.userList = response.data; }); }, addUser: function() { axios.post('/users', { name: this.userName, age: this.userAge, gender: this.userGender }).then(response => { alert(response.data.msg); if (response.data.code == 0) { this.getUsers(); } }); }, deleteUser: function(userId) { axios.delete('/users/' + userId).then(response => { alert(response.data.msg); if (response.data.code == 0) { this.getUsers(); } }); } } }); </script> </body> </html> ``` ## 注意事项 1. 在 JFinal 中使用 `render("index.html")` 渲染 Vue 的页面; 2. 在 Vue 的 `axios` 请求中,需要加上 JFinal 的路由前缀,例如 `/users`; 3. 在 Vue 的 `axios` 请求中,需要加上 `Content-Type: application/json` 的请求头,否则 JFinal 无法解析请求体; 4. 在 Vue 的 `axios` 请求中,需要将数据放在请求体中,例如 `{ name: this.userName, age: this.userAge, gender: this.userGender }`; 5. 在 Vue 的 `axios` 请求中,需要将 JFinal 返回的 JSON 数据中的 `code` 和 `msg` 提取出来,例如 `response.data.code` 和 `response.data.msg`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值