ssm框架vue前端项目怎么跑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssm框架vue前端项目怎么跑相关的知识,希望对你有一定的参考价值。
参考技术A 这样跑,制定好框架啊,写好包要有容器制定好框架,写好包,要有容器就可以跑起来 参考技术B 首先创建一个空文件夹,用于存放整个项目,然后在地址栏全选输入cmd按回车,就会进入到当前文件夹目录下的终端 在命令行中输入vue create ssm-ui 创建一个新的vue项目,ssm-ui是项目文件夹的名字 这样表示当前vue项目正在下载,当加载完成后,输入以下俩条命令,就可以运行我的vue项目 项目加载完成后出现一个地址,可以根据这个地址,在网页上访问我们的vue项目 前端环境搭建 打开我们的idea,进入到初始页面,打开文件,选择我们刚刚创建项目的总包,把我们的项目放在idea上面,这样方便我们操作。进入idea打开我们的项目后,在idea下面的选择栏,选择我们的终端,输入npm install vue-router@4,配置我们的vue-router 安装完毕后,在我们vue项目的包下,打开src
Vue
回顾SSM
前端核心分析
Vue概述
Vue:前端体系,前后端分离
Vue.js是一套构建用户界面的渐进式JavaScript框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
视图层:HTML+CSS+JS 给用户看,刷新后台数据
网络通信:axios
页面跳转:Vue-router
状态管理:Vuex
VueUI:飞冰
ES6规范通过webpack打包成ES5支持
前端为主的MV*模式
- MVC(同步通信为主):Model,View,Controller
- MVP(异步通信为主): Model,View,Presenter
- MVVM(异步通信为主): Model,View,ViewModel
NodeJS带来全栈时代
第一个Vue程序
MVVM
前后端数据通过ViewModel绑定,虚拟化Dom概念
MVVM模式实现者
- Model:模型层,在这里表示JavaScript对象
- View:视图层,在这里表示DOM(HTMl)操作对象
- ViewModel:连接视图层和数据的中间组件,Vue.js就是MVVM中ViewModel层的实现者
在MVVM架构中是不允许数据和视图直接通信的只能通过ViewModel来通信,而ViewModel就是定义了一个Observer观察者。
- ViewModel能够观察数据的变化并对视图内容进行更新
- ViewModel能够监听到视图的变化,并能够通知数据发生改变
Vue.js的核心就是实现DOM监听和数据绑定
Vscode
Hubilder
Sublime
WebStrom
IDEA:插件 Vue
MVVM
为什么要使用MVVM?
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模式(Model)
有几大好处:
- 低耦合:视图可以独立于Model变化和修改,一个ViewModel可以绑定不同的View上,当View变化时候Model不变,当Model变化时View也可以不变。
- 可复用:你可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。
- 独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
- 可测试:界面素来是比较难于测试的,而现在测试可以只针对ViewModel来写。
第一个Vue程序
<body>
<!-- view层 模板-->
<div id="app">
{{message}}
</div>
<!-- 导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
<!-- vm:对象 el:元素 data:数据 -->
let vm=new Vue({
el:"#app",
//Model:data
data:{
message:"hello,Vue!"
}
});
//ViewModel:通过vm.message动态双向绑定更新值
</script>
</body>
Vue基本语法
Vue常用7个属性:el,data,template,methods,render,computed,watch
导入Vue.js
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
V-bind
我们已经成功创建第一个Vue应用!看起来这跟渲染一个字符串模板非常相似,但是Vue在背后做了大量工作。现在数据和DOM已经被建立关联,所有东西都是响应式对的。我们在控制台操作对象属性,界面可以时实更新。
我们还可以使用v-bind来绑定元素特性!
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
v-bind等被称为指令。指令带有前缀v-,以表示他们是Vue提供的特殊属性。他们会在渲染DOM上引用特殊的响应式行为。此处的意思是:将这个节点的Title属性和Vue实例的message属性保持一致。
判断-循环
v-if ,v-else
<div id="app">
<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>
</div>
<script>
let vm=new Vue({
el:"#app",
data:{
ok: true
}
});
</script>
<div id="app">
<h1 v-if="type==='A'">A</h1>
<h1 v-else-if="type==='B'">B</h1>
<h1 v-else>C</h1>
</div>
<script>
let vm=new Vue({
el:"#app",
data:{
type:'A'
}
});
</script>
循环
<div id="app">
<ul>
<li v-for="item in items">
{{item.message}}
</li>
</ul>
</div>
<script>
let vm=new Vue({
el:"#app",
data:{
//数组用[]表示,对象用{}
items:[
{message:'mafu学Java'},
{message:'mafu学Vue'}
]
}
});
</script>
事件 v-on
可以用v-on指令监听DOM事件,并在触发时运行一些JavaScript代码。
<div id="app">
<button v-on:click="sayHello">点击</button>
</div>
<script>
<!-- Vue有七大属性 有事件就有方法:method-->
let vm=new Vue({
el: "#app",
data: {
message:"mafu!"
},
methods: {//方法必须定义在Vue的Method属性中 v-on:事件 监听
sayHello: function (){//this指向vm这个对象
alert(this.message);
}
}
});
</script>
Vue双向绑定
什么是双向绑定?
Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化时候,视图也发生变化,当视图发生变化时数据也同步变化,这也是Vue.js的精髓之处。
值得注意的是我们所说的数据双向绑定,一定是对于UI控件来说的,非UI控件不会涉及到数据双向绑定。单向数据绑定是使用状态管理工具的前提。如果我们输赢VueX,那么数据流也是单向的,这时就会和双向数据绑定冲突。
为什么要实现数据双向绑定?
在Vue.js中,如果使用VueX实际上数据还是单向的,之所以说数据是双向绑定,这是用的UI控件来说的,对于我们处理表单,Vue.js双向数据绑定用起来就非常舒服了。即两者并不排斥,在全局性数据流中使用单向,方便跟踪;局部性数据流使用双向,简单操作。
v-model
text框:
<div id="app">
输入的文本:<input type="text" v-model="message"> {{message}}
</div>
<script>
<!-- Vue有七大属性 有事件就有方法:method-->
let vm=new Vue({
el: "#app",
data: {
message: "123"
}
});
</script>
radio单选框:
<div id="app">
<!-- 输入的文本:<input type="text" v-model="message"> {{message}}-->
<label>性别:</label>
<input type="radio" name="sex" value="man" v-model="checked"> 男
<input type="radio" name="sex" value="women" v-model="checked"> 女
<p>
选中了谁:{{checked}}
</p>
</div>
<script>
<!-- Vue有七大属性 有事件就有方法:method-->
let vm=new Vue({
el: "#app",
data: {
checked:false
}
});
</script>
select下拉框:
<div id="app">
下拉框:
<select v-model="selected">
<option value="" disabled>--请选择--</option>
<option>凤山</option>
<option>英桥</option>
<option>文地</option>
</select>
<p>
选中:{{selected}}
</p>
</div>
<script>
<!-- Vue有七大属性 有事件就有方法:method-->
let vm=new Vue({
el: "#app",
data: {
selected:''
}
});
</script>
Vue组件讲解
什么是组件
组件是可复用的Vue实例,说白了就是一组可以重复使用的模板,跟JSTL的自定义标签、Thymeleaf的th:fragment等框架有异曲同工之妙。通常一个应用会以一颗嵌套的组件树的形式来组织。
第一个Vue组件
注意:在实际开发中并不会使用一下方式开发组件,而是采用vue-cli创建.vue模板文件的开发方式,以下方法只是为让大家理解什么是组件。
使用Vue.component()方法注册组件,格式:
//定义一个Vue组件component
Vue.component("mf",{
template:'<li>hello</li>'
});
组件绑定然后props接收参数
<div id="app">
<!-- 组件:传递给组件中的值:需要先绑定然后用props接收参数-->
<mf v-for="item in items" v-bind:item="item"></mf>
</div>
<script>
//定义一个Vue组件component
Vue.component("mf",{
props: ['item'],
template:'<li>{{item}}</li>'
});
let vm=new Vue({
el: "#app",
data: {
items: ["java","linux","c++"]
}
});
</script>
Axios异步通信
网络通信:
- jQuery.ajax()
- Axios
什么是Axios
Axios是一个开源的可以用在浏览器端和NodeJS的异步通信框架,它的主要作用是实现AJAX异步通信,其功能特点如下:
- 从浏览器中创建XMLHttpRequests
- 从node.js创建http请求
- 支持PromiseAPI [JS中链式编程]
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换JSON数据
- 客户端支持防御XSRF(跨站请求伪造)
为什么实用Axios
由于Vue.js是一个视图层框架,并且作者严格遵守Soc(关注度分离原则),所以Vue.js并不包含AJAX通信的功能,为了解决通信功能,作者单独开发了一个名为vue-resource的插件,不过在进入2.0版本后停止了对该插件的维护并推荐Axios框架。少用jQuery因为它操作Dom太频繁!
第一个Axios程序
导入Axios CDN
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
Vue声明周期
Vue实例有一个完整的生命周期,就也是从开始创建,初始化数据,编译模板,挂载DOM,渲染,更新,渲染,卸载等一系列过程,我们称之为Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程就是生命周期。
在整个Vue生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册JS方法,可以让我们用自己注册的方法控制整个大局,在这些事件响应方法中的this直接指向的是Vue的实例。
<!DOCTYPE html>
<!--suppress JSValidateTypes -->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- v-clock解决闪烁问题-->
<style>
[v-clock]{
display: none;
}
</style>
</head>
<body>
<div id="vue" v-clock>
<div>{{info.name}}</div>
<div>{{info.address.city}}</div>
<a v-bind:href="info.url">kuangShengXue</a>
</div>
<!--导入JS文件-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
let vm=new Vue({
el: '#vue',
//data:属性 vm
data(){
return{
//请求的返回参数格式必须和JSON字符串格式一样
info:{
name:null,
address:{
street:null,
city:null,
country:null
},
url:null
}
}
},
mounted(){//钩子函数 链式编程 es6新特性
axios.get('../data.json').then(response=>(this.info=response.data));
}
});
</script>
</body>
</html>
计算属性
计算属性、内容分发、自定义事件
什么是计算属性
计算属性是Vue的特色:计算出来的结果保存在属性中。运行在内存:虚拟DOM
计算属性的重点突出在属性两个字上,首先它是个属性其次这个属性有计算的能力,这里的计算就是这个函数;简单点说,他就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此而已:可以想象为缓存!
<div id="app">
<p>currentTime1:{{currentTime1()}}</p>
<p>currentTime2:{{currentTime2}}</p>
</div>
<!--导入JS文件-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let vm=new Vue({
el: '#app',
data: {
message:'hello,mf'
},
methods: {
currentTime1:function (){
return Date.now();//返回一个时间戳
}
},
computed: {//Vue特色:计算属性 methods和computed中的方法名不能重名,重名之后只会调用methods方法
currentTime2:function (){
this.message;//只有this当中的属性变化时才会重新计算
return Date.now();//返回一个时间戳
}
}
});
</script>
结论
调用方法时,每次都需要进行计算,既然有计算过程则必须产生系统开销,那如果这个结果不是经常变化呢?此时就可以考虑将这个结果缓存起来以节约系统开销。
插槽slot
内容分发
在Vue.js中我们使用元素作为承载分发内容的出口,作者成为插槽,可以应用在组合组件的场景中。
<!--简写 v-bind: 简写为: v-on:简写为@-->
<div id="app">
<todo></todo>
<todo-title slot="todo-title" :title="title"></todo-title>
<todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
</div>
<!--导入JS文件-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
//后面加个反斜杠,表示换行
//slot:插槽,插数据
Vue.component('todo',{
template: '<div>\\
<slot name="todo-title"></slot>\\
<ul>\\
<slot name="todo-items"></slot>\\
</ul>\\
</div>'
});
Vue.component('todo-title',{
props:['title'],
template: '<div>{{title}}</div>'
});
Vue.component('todo-items',{
props前后端分离vue+ssm项目整合
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面,使用域名访问本地项目)