要说到Vue,我们就不得不先聊起前后端分离。这个前后端分离呢,它是属于软件架构中的一种。其核心思想就是把前端项目和后端项目独立部署到不同的服务器上,前端项目在通过Ajax请求服务器端项目Restful接口实现数据交互。使用前后端分离架构的项目在项目组中往往配备前端工程师和后端工程师。而Vue.js 小巧,灵活,功能却很强大。在市场上占有率更高,属于成熟稳定的框架。
Vue使用{ { key }}获取js中data() 函数返回值。获取的值中如果包含HTML代码,不会解析,原格式输出。
<template>
<div id="app">
<div>
我是{
{name}},我的师傅是{
{master}},我要讨伐{
{king}}
我是{
{person.name}} 今年 {
{person.age}} 岁
div>
div>
template>
<script>
// export是一个数据对象,我们可以写多个属性或者函数
export default {
data(){
return{
name:"姜子牙",
master:"元始天尊",
king:"纣王",
person:{
name:"张桂芳",
age : 16
}
}
}
}
script>
<div>
我是{
{person.name}} 今年 {
{person.age}} 岁
<input type="button" v-on:click="person.age = person.age + 1" value="年龄 + 1"/>
<input type="button" @click="AddAge" value="年龄-1"/>
<span v-if="person.age<18">未成年span>
<span v-else-if="person.age >= 18 && person.age < 35">青年span>
<span v-else-if="person.age >= 35 && person.age < 50">壮年span>
<span v-else-if="person.age >= 50 && person.age < 60">中年span>
<span v-else>老年span>
div>
methods:{
//定义当前组件中可以使用的所有函数
AddAge:function () {
this.person.age = this.person.age - 1;
}
}
<div>
学校学院分别有
<ul>
<li v-for="My in MyClass" v-bind:key="My">
学院{
{My.name}} 班级数 {
{My.number}}
li>
ul>
div>
//在return返回下面再定义一个数组,我们等下用循环来遍历
MyClass:[
{"name":"信息工程学院","number":8},
{"name":"机电工程学院","number":6},
{"name":"经济管理学院","number":7}
]
如果希望能够解析HTML,必须使用v-html指令。v-html是任意HTML标签的属性,v-html的取值可以是Model中定义的字段。
<span v-html="MyJava">span>
MyJava:"我爱<b>Javab>编程"
组件:如果项目中多次用到类似效果,就可以把这个效果进行自定义组件。新建项目后默认存在HelloWorld.vue就是一个组件。组件文件必须导入才能使用。其中Helloworld为自定义名称,通过这个名称就可以调用对应组件。如果import时直接写组件名(大小写相同)IDEA会提升生成组件的路径,所以一般习惯上都是把名称定义为组件文件名。components: 组件文件只import是不能被使用的。必须在components中注册组件,注册后在中就可以通过组件名直接引用组件了。在中组件以标签形式存在,标签名为组件名。其中msg是在Helloworld中定义的props参数,表示需要传递给组件的数据。
<template>
<div>
<div>这是一个组件div>
<div>{
{MyLove}}div>
div>
template>
<script>
export default {
//我的组件名
name: "MyComponents",
//props:定义组件传递的参数名称和类型
props:{
MyLove:String
}
}
script>
<style scoped>
style>
<template>
<div id="app">
<div>
<MyComponents MyLove="Java"/>
div>
div>
template>
<script>
//导入,不导入会报错
import MyComponents from "@/components/MyComponents";
// export是一个数据对象,我们可以写多个属性或者函数
export default {
components:{
MyComponents
},
script>
<template>
<div id="app">
<div>
我是{
{name}},我的师傅是{
{master}},我要讨伐{
{king}}
<br/>
<span v-html="MyJava">span>
div>
<div>
我是{
{person.name}} 今年 {
{person.age}} 岁
<input type="button" v-on:click="person.age = person.age + 1" value="年龄 + 1"/>
<input type="button" @click="AddAge" value="年龄-1"/>
<span v-if="person.age<18">未成年span>
<span v-else-if="person.age >= 18 && person.age < 35">青年span>
<span v-else-if="person.age >= 35 && person.age < 50">壮年span>
<span v-else-if="person.age >= 50 && person.age < 60">中年span>
<span v-else>老年span>
div>
<div>
学校学院分别有
<ul>
<li v-for="My in MyClass" v-bind:key="My">
学院{
{My.name}} 班级数 {
{My.number}}
li>
ul>
div>
<div>
<MyComponents MyLove="Java"/>
div>
div>
template>
<script>
//导入,不导入会报错
import MyComponents from "@/components/MyComponents";
// export是一个数据对象,我们可以写多个属性或者函数
export default {
components:{
MyComponents
},
data(){
return{
name:"姜子牙",
master:"元始天尊",
king:"纣王",
person:{
name:"张桂芳",
age : 16
},
//在return返回下面再定义一个数组,我们等下用循环来遍历
MyClass:[
{
"name":"信息工程学院","number":8},
{
"name":"机电工程学院","number":6},
{
"name":"经济管理学院","number":7}
],
MyJava:"我爱Java编程"
}
},
methods:{
//定义当前组件中可以使用的所有函数
AddAge:function () {
this.person.age = this.person.age - 1;
}
}
}
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>
Object | 对象 |
String | 字符串 |
Boolean | 布尔 |
Number | 数字 |
Array | 数组 |
Promise | 构造方法 |
Function | 函数 |
当传递数值类型时,必须使用v-bind指令进行设置,这时参数表示一个表达式而不是一个字符串。v-bind:age="12" 。如果直接使用age=12进行传参效果依然可以实现,但是会在浏览器出现错误,提示要一个12的参数值,但是发现传递的是”12”
Vue Element 就是Vue的扩展插件。网址。写代码的时候可以点进官网对着文档进行学习和修改
头上有@注释的就是标识引入的那三句话
import Vue from 'vue'
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
import ElementUI from 'element-ui';
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'
Vue.config.productionTip = false
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Vue.use(ElementUI);
new Vue({
render: h => h(App),
}).$mount('#app')
在App.vue中添加Eleme官网中组件内容。就比如说我先弄个按钮
<el-button type="primary">这是一个el的按钮el-button>
@Controller
public class MyController {
@RequestMapping("/hello")
@ResponseBody
public String MyHello(String MyData){
System.out.println("后台接收前台的数据: " + MyData);
return MyData;
}
}
<template>
<div>
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="数据">
<el-input v-model="form.MyData">el-input>
el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">传递数据el-button>
<el-button>取消el-button>
el-form-item>
el-form>
div>
template>
<script>
export default {
data() {
return {
form: {
MyData:"i love java"
}
}
},
methods: {
onSubmit() {
this.$.post("/hello",this.$.stringify({
MyData:this.form.MyData
}))
}
}
}
script>
public class User {
private String name;
private Integer age;
}//写get set或者使用注解。这里就不写在文章里面了
@Controller
public class MyController {
@RequestMapping("/show")
public List<User> show(){
List<User> list = new ArrayList<>();
list.add(new User("张子明",19));
list.add(new User("刘小刚",23));
return list;
}
}
<template>
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
prop="name"
label="姓名"
width="150">
el-table-column>
<el-table-column
prop="age"
label="年龄"
width="120">
el-table-column>
el-table>
template>
<script>
export default {
data() {
return {
tableData: []
}
},
mounted() {
this.$.get("/show")
.then(res => {
this.tableData = res.data;
})
}
}
script>