vue基本格式
<html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
</div>
<script>
var app = new Vue({
el: "#app",
data:{
msg:"123",
msg2:"123",
},
methods:{
move1(){
},
}
})
</script>
</body>
</html>
script引入vue
指令
- v-cloak:防止页面显示插值加载前内容
- v-text:显示文本内容,不会转义heml
- v-html:转义html后显示
- v-bind: 简写 : ,属性修饰符
<img class="image" v-bind:src="image + '.png'">
- v-on:简写:@ ,事件修饰符
<p @click="last">上一张</p>
<p @click="next">下一张</p>
- v-model:双向数据绑定
<input type="text" @keyup.enter="enter1" v-model="message">
- v-for:循环
<ul>
<li v-for="(item,index) in list">{{index}},{{item}}</li>
</ul>
data:{
list:[1,2,3,4,5]
},
- v-if,v-show:v-if每次都会重新创建删除元素,v-show不会创建删除,只是控制显示
<input type="button" value="flag" @click="flag=!flag">
<p v-show="flag" >v-show</p>
data:{
list:[1,2,3,4,5],
list1:[
{id:1,name:'jjboy'},
{id:2,name:'jjj'}
],
flag:true,
},
- 事件修饰符
实例
- 跑马灯
<div id="app">
<input type="button" value="开始" @click="start">
<input type="button" value="停止" @click="stop">
<h1>
{{msg}}
</h1>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
msg:"跑马灯效果展示",
},
methods:{
start(){
setInterval(() => {
this.msg = this.msg.substring(1)+this.msg.substring(0,1);
}, '400');
},
stop(){
},
}
})
</script>
全局过滤器
- 只能用在插值和v-bind中
<script>
Vue.filter('msgformat',function(msg , arg){
return msg.replace(/木兰/g,arg)
})
</script>
<div id="app">
<h1>
{{ msg|msgformat("方法") }}
</h1>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
msg : "唧唧复唧唧,木兰当户织1"
}
})
</script>
-
filter一定要定义在使用之前,如果把filter的定义放在使用之后会没有效果。
-
String字符串填充方法:padstart(2,"0") : 不足两位的前面填0
padend: 后面填 -
键盘事件---回车
<div id="app">
<input type="text" @keyup.enter="add">
</div>
<script>
var app = new Vue({
el:"#app",
data:{
msg : "唧唧复唧唧,木兰当户织1"
},
methods:{
add(){
alert(this.msg)
alert("lsdkf")
}
}
})
</script>
- 按键修饰符
钩子函数自定义指令
实现聚焦
Vue.directive('focus',{
inserted:function(el){
el.focus()
}
})
- 之后就可以使用v-focus实现聚焦
- 自定义指令时名字为focus,但是使用时要用v-focus
自定义指令方法
实现颜色改变
Vue.directive('color',{
bind:function(el){
el.style.color='red';
}
})
- 使用
<input type="text" @keyup.enter="add" v-focus v-color>
增加参数传值
<div id="app">
<input type="text" @keyup.enter="add" v-focus v-color="'blue'">
</div>
<script>
Vue.directive('focus',{
inserted:function(el){
el.focus()
}
})
Vue.directive('color',{
bind:function(el,binding){
el.style.color=binding.value;
}
})
部分指令可以简写
vue生命周期
生命周期过程演示
var app = new Vue({
beforeCreate(){
//在data methods 之前
alert(this.msg)
},
data:{
msg : "唧唧复唧唧,木兰当户织1"
},
methods:{
add(){
alert(this.msg)
alert("lsdkf")
}
},
created(){
//在data methods 之后
alert(this.msg)
},
//然后是
el:"#app",
beforeMount(){
//模板完成渲染但尚未挂载到页面
},
mounted(){
//挂载完成,用户可以看到页面
},
//运行时的两个事件
//如果data发生改变执行 beforeupdate 和 update
beforeUpdate(){
//数据被修改之后执行此方法
//此时数据是新的,但是页面显示的还是旧的数据
},
//执行渲染
//然后调用方法
update(){
//此时数据是新的,页面显示也是新的
},
//关闭页面,进入销毁阶段
beforeDestory(){
//此时 data methods filter 指令 。。。。 都处于可以使用的状态
},
destory(){
//页面销毁,所有数据不可以使用
}
})
- 方法依次执行
vue发请求
- 两种第三方包实现方式
- vue-resource
- axios
vur-resource:
- 连接:
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
- 请求方式:get,post,jsonp
this.$http.get("http://www.liulongbin.top:3005/api/getprodlist").then(result => {
var result = result.body
if(result.status == 0){
this.list = result.message
}else {
alert("失败了")
}
})
实现post get 请求 以及配置
- 前端
<html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
</head>
<body>
<div id="app">
<h1>添加商品</h1>
<div>
<input type="text" v-model="name" v-focus v-model="name">
<input type="button" value="添加商品" @click="add" @keyup.enter="add">
</div>
<table id="table">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>time</th>
<th>option</th>
</tr>
</thead>
<tbody>
<tr v-for="item in list">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.time}}</td>
<td>
<input type="button" value="delete" @click.prevent="delete1(item.id)">
</td>
</tr>
</tbody>
</table>
</div>
<script>
//全局请求的root地址 后面必须加上/
Vue.http.options.root = "http://localhost:8080/";
//配置全局post传送输入方式为JSON 这样后端用@ReauestParam就不会报错
//如果不配置全局并且post中也不加 后端只能用@RequestBody
Vue.http.options.emulateJSON = true;
Vue.directive("focus",{
inserted:function(el){
el.focus();
}
})
var app = new Vue({
el:"#app",
data:{
list:[
{id:1,name:"jj",time: new Date()},
{id:2,name:"dd",time: new Date()},
],
name:"",
id:"",
},
created(){
this.getAllList();
},
methods:{
delete1(id){
this.$http.get("api/get/" + id).then(result => {
this.getAllList()
})
},
add(){
this.$http.post("api/get",{name:this.name}).then(result =>{
this.getAllList()
this.name = ""
})
},
getAllList(){
this.$http.get("api/get").then(result => {
this.list = result.body
})
}
}
})
</script>
</body>
</html>
//全局请求的root地址 后面必须加上/
Vue.http.options.root = "http://localhost:8080/";
//配置全局post传送输入方式为JSON 这样后端用@ReauestParam就不会报错
//如果不配置全局并且post中也不加 后端只能用@RequestBody
Vue.http.options.emulateJSON = true;
- 后端 实现前后端衔接 后端是springboot
controller 层
package com.vue.controller;
import com.sun.tools.corba.se.idl.InterfaceGen;
import com.vue.bean.TestBean;
import com.vue.service.TestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import sun.jvm.hotspot.utilities.Interval;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created by Enzo Cotter on 2020-02-19.
*/
@CrossOrigin
@RestController
@Slf4j
@RequestMapping(value = "/api/get")
public class TestController {
@Autowired
private TestService testService;
@GetMapping(value = "")
public List<TestBean> get(){
return testService.findAll();
}
@CrossOrigin
@GetMapping(value = "/{id}")
public void delete1(@PathVariable(value = "id") Integer id){
testService.remove(id);
}
@PostMapping
public void insert(@RequestParam(value = "name") String name){
System.out.println(name);
testService.insert(name);
}
}
注解:跨域 , 返回responsebody,返回数据类型为:JSON,日志,请求路径
组件添加方法3
<html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
</head>
<body>
<template id="tem1">
<div>
<h1>sss</h1>
</div>
</template>
<div id="app">
<mycom></mycom>
</div>
<script>
Vue.component("mycom",{
template:"#tem1",
})
var app = new Vue({
el: "#app",
data:{
},
methods:{
}
})
</script>
</body>
</html>