VUE技术栈--前后端分离

    技术2026-08-20  9

    Node.js入门

    概述

    服务端程序:可以实现spring,springmvc,servlet这些服务端代码。环境:下载–>安装–>配置环境变量(自动配置)验证:cmd打开–>输入node -v–>回车,如果出现以下图片,则安装成功。

    简单使用一(一般不用)如下图:

    退出:Ctrl+C按两下

    简单使用二

    找目录新建hello.js文件输入以下代码: console.log(1+2); 测试:cmd进入当前目录:输入:nonde hello.js–>回车,出现以下结果:

    函数使用:

    上述步骤,输入代码: var result=add(1,2); console.log(result); function add(a,b){ return a+b; } 测试:cmd进入当前目录:输入 node hello1.js–>回车,出现以下结果:

    模块化编程示例

    test1.js里是函数,test2.js中调用test1.js中的add函数

    test1.js代码 /* 说明: 如果写成这样: function add(a,b){ return a+b; } 则外部不能访问,如果外部要访问,换一种写法: exports.add=function(a,b){ return a+b; } 说明:第一种写法相当于java中private,外部不能访问 第二种写法:加上exports,相当于将private变成public,外部可以访问 */ exports.add=function(a,b){ return a+b; } test2.js中代码: /* 说明: ./:当前目录 require('./test1');引入test1.js文件 var func:定义变量,将test1.js文件对象给func func.add(1,2);调用func对象中的add方法 result:接收func.add(1,2)返回的结果 console.log(result);控制台打印结果 */ var func=require('./test1'); var result = func.add(1,2); console.log(result); 测试:输入node test2.js–>回车,有以下结果则正确:

    node.js开发服务端代码:

    参考官网说明文档:新建server.js文件,代码如下: //引入http var http=require('http'); //createServer:node内部自定义函数 //listen:绑定端口 http.createServer(function(request,response){ for(var i=0;i<10;i++){ response.write("hello word....+i"); } response.end("end..."); }).listen(9999); console.log('服务已经开启,请在浏览器输入:ip:9999'); 测试:浏览器地址输入:localhost:9999 回车,如果看到以下图片,则正确

    关闭服务:Ctrl+C再次访问localhost:9999,无法访问(因为已经关闭)

    node.js开发服务端代码传参数:

    server1.js文件代码: //引入http var http=require('http'); //引入url var url=require('url'); //createServer:node内部自定义函数 //listen:绑定端口 http.createServer(function(request,response){ for(var i=0;i<10;i++){ response.write("hello word....+i"); } //空格 response.write("\n"); //localhost:9999?name=张三&age=23 //parse:node.js中定义好的方法 //true:固定写法 //request.url:请求中的参数 //query:name=张三&age=23 var params=url.parse(request.url,true).query; response.write(params.name); response.write("\n"); response.write(params.age); response.end("end..."); }).listen(9999); console.log('服务已经开启,请在浏览器输入:ip:9999?name=张三&age=23'); 开启服务:node server1.js测试:输入:http://localhost:9999/?name=张三&age=23 回车

    NPM与webpack

    NPM使用

    NPM使用: 一.找个目录,打开cnd进入该目录–>输入npm init -->一路回车–>生成package.json(相当于pom.xml) 二.package.json中内容如下: { "name": "test1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }

    npm下载包

    安装

    当前目录输入:npm install express如果上述比较慢:输入npm install expressnpm install -g cnpm -registry=http://registry.npm.taobao.org然后输入:cnpm install express本计算机全局下载:cnpm install jquery -g

    webpack使用

    概述:将js css等静态资源压缩,提高效率。

    安装webpack:cnpm install webpack -gcnpm install webpack-cli -g测试:webpack -v

    打包测试

    配置文件:ewbpack.config.js: var path=require('path'); moudle.exports={ //函数的入口 entry:'.test/test1.js', output:{ //打包的文件目录:__dirname/.dist/bundle.js path:path.resolve(__dirname,'.dist'), filename:'bundle.js' } }

    VUE使用

    v-model:实现数据双向绑定

    网站:https://cdn.staticfile.org/vue/2.2.2/vue.min.js

    示例: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div id="fir"> 用户名:<input type="text" v-model="name" /> <h1>{{name}}</h1> </div> <script type="text/javascript" src="js/vue.min.js"></script> <script> new Vue({ el: '#fir', data:{ name:'zs' } }) </script> </body> </html>

    DomListener:数据监听(绑定)

    v-html=" "v-text=" "v-bind:src=" “等价于::src=” "(给标签绑定数据)v-on:click=“method(‘zs’)”@click=“test(’'ls)”

    vue结构

    结构内容

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> 用户名:<input type="text" v-model="username" /> 地址: <input type="text" v-model="useraddress" /> <input type="text" v-model="info" /> <button v-on:click="show()">点击测试</button> </div> <script type="text/javascript" src="js/vue.min.js"></script> <script> var vm = new Vue({ /*渲染哪里*/ el: "#test", /*数据*/ data: { username: "张三", useraddress: "宝鸡" }, /*定义一些方法:例如点击事件触发的事件*/ methods: { show() { alert(1); } }, /*初始化自动加载*/ computed: { info() { return this.username + "," + this.useraddress; } }, /*监听第一种写法:html--->data*/ watch: { username: function(value) { this.username = value; } } }); /*监听第二种写法*/ vm.$watch('username', function(value) { this.username = value; }); </script> </body> </html>

    样式绑定

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .ba { background-color: red; } </style> </head> <body> <div id="test"> <div :class="css1">vue样式绑定</div> </div> <script type="text/javascript" src="js/vue.min.js"></script> <script> new Vue({ el: "#test", data: { css1: "ba" } }); </script> </body> </html>

    v-for循环显示并删除/需改

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> <ul> <!--在js中data的数据user中循环,循环的每一项是u,他的下标是index,序号是index--> <li v-for="(u,index) in user" :key="index"> {{u.name}}----{{u.address}}-----<input type="button" value="删除" @click="deleteById(index)" />----<input type="button" value="修改" @click="updateUserById(index,{name:'zs',address:'bj'})" /> </li> </ul> </div> <script type="text/javascript" src="js/vue.min.js"></script> <script> new Vue({ el: "#test", data: { user: [{ name: '张三', address: '宝鸡' }, { name: '李四', address: '西安' }, { name: '赵六', address: '上海' }, { name: '钱起', address: '北京' }, { name: '张三', address: '宝鸡' }] }, methods: { deleteById(index) { /*删除第index个,删除一个*/ /*删除元素后,驻足元素会自动排序*/ this.user.splice(index, 1); }, updateUserById(index,user){ /*splice(哪一个数据,几个,修改为什么)*/ /*将index个元素修改为user*/ this.user.splice(index,1,user); } } }); </script> </body> </html>

    事件与传播行为

    事件获取value的值 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> <input type="button" value="按钮1" @click="show"/> <!--event:vue内置对象--> <input type="button" value="按钮2" @click="show1($event)"/> </div> <script type="text/javascript" src="js/vue.min.js" ></script> <script> new Vue({ el:"#test", data:{ }, methods:{ show(event){ /*获取当前dom的对象*/ alert(event.target.value); }, show1(event){ alert(event.target.value); } } }); </script> </body> </html> propogation事件的传播行为 阻止:@click.stop=" " <a href="https://www.baidu.com" @click.prevent>百度</a>

    使用vue绑定表单输入与vue声明周期

    意义:如果前端向后端传递form表单,不用一个一个获取表单中的数据,而一次性的将表单作为一个对象传递到后台。

    使用vue绑定表单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> <form action="" @submit.prevent="mysubmit"> 用户名:<input type="text" v-model="user.name" /><br /> 密码: <input type="text" v-model="user.pwd" /><br /> 性别: <input type="radio" value="男" v-model="user.sex" /><input type="radio" value="女" v-model="user.sex" /><br /> 住址: <select v-model="user.address"> <!--循环遍历vue中optionCities定义好的地址--> <option :value="c.id" v-for="c in optionCities">{{c.name}}</option> </select><br/> 爱好: <input type="checkbox" value="羽毛球" v-model="user.hobby" /> 羽毛球 <input type="checkbox" value="篮球" v-model="user.hobby" />篮球 <input type="checkbox" value="乒乓球" v-model="user.hobby" /> 乒乓球<br /> <input type="submit" value="注册" /> </form> </div> <script type="text/javascript" src="js/vue.min.js"></script> <script> new Vue({ el: "#test", data: { user: { name: '', pwd: '', /*默认选中的值*/ sex: '男', address: '', hobby: '' }, optionCities: [{ id: 1, name: '西安' }, { id: 2, name: '上海' }, { id: 3, name: '广州' }] }, methods: { mysubmit() { /*若有服务端,在此处发送ajax请求*/ alert(JSON.stringify(this.user)); } } }); </script> </body> </html>

    过滤器:过滤日期

    例如:将一个日期过滤成另一个日期(事件格式化)

    引入:moment.js <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> {{now | dataFilter}} </div> <script type="text/javascript" src="js/vue.min.js" ></script> <script type="text/javascript" src="js/moment.js" ></script> <script> //注册过滤器:注册---》使用 //dataFilter:注册的名字 //value:注册的时间 //dateFormat:注册的格式 Vue.filter('dataFilter',function(value,dateFormat='YYYY-MM-DD HH:mm:ss'){ return moment(value).format(dateFormat); }); new Vue({ el:"#test", data:{ now:new Date() } }); </script> </body> </html>

    自定义指令

    注意:比如:v-text-upper:定义时只需写text-upper。使用时v-test-upper 指令分为:局部指令和全局指令

    自定义全局指令(在整个js代码域注册) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test"> <!--myText:从vue中的data中获取数据--> <p v-text-upper="myText"></p> </div> <script type="text/javascript" src="js/vue.min.js" ></script> <script> /*注册全局指令*/ /*binding绑定的元素*/ /*el选择器*/ Vue.directive('text-upper',function(el,binding){ /*toUpperCase:js中自定义函数*/ el.innerHTML=binding.value.toUpperCase(); }); new Vue({ el:"#test", data:{ myText:'hello word' } }); </script> </body> </html> 自定义局部指令(在一个vue对象内部定义)

    vue脚手架vuecli的安装与启动

    脚手架:模板/客户端

    安装脚手架

    找一个目录—>打开cmd进入该目录—>执行:npm install -g vue-cli下载模板:vue init webpack my_vue_cli(my_vue_cli为默认工程名,不能有大写字母)cmd进入工程根目录文件夹—>执行:npm run dev(启动服务)这时会看到: 浏览器输入:http://localhost:8080会看到以下,说明成功

    关闭服务:Ctrl+C

    vue项目开发完成后

    静态服务 概述:当开发人员开发完毕后,进行打包(生成dist),交给实施人员

    运行:npm run buile(相当于java—>war)进行打包—>dist dist给实施人员时:实施人员需要安装服务组件:npm install -g server 然后运行指令:server dist

    动态服务:tomcat 1.在vue项目中的webpack.prod.conf.js中output配置:publicpath:/myvue/ 2.进行打包 3.将dist拷贝到tomcat中webapps目录下,修改dist文件名为myvue。 4.启动tomcat
    Processed: 0.013, SQL: 9