三种方式向后端发送请求、Vue全局/局部组件、组件之父传子、计算属性、 (监视器没讲)
1 与后端交互的几种方式
-
1.1 发送axios请求
# 一种是重写_this = this, 使用一个变量代替this 的用法,因为this在function函数中指代的是当前函数,而不是当前对象
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
methods:{
get_axios(){
let _this=this // 这里重写this,在function函数中指代的是函数,而不是当前对象
axios({
method:'get',
url:'/book1/'
}).then(function(res){
// console.log(res.data)
_this.book_obj = res.data
// console.log(_this.book_obj)
});
}
}
# 另一种是是用箭头函数的写法,就不需要重写this
methods:{
get_axios(){
axios({
method:'get',
url:'/book1/'
}).then(res => {
this.xx = res.data
})
}
}
#
-
1.2 发送ajax请求
# 使用箭头函数
methods:{
get_ajax(){
$.ajax({
type:'get',
url:'/book1/',
success:res=>{
this.book_obj = res
}
})
},
}
#
methods:{
get_axios(){
let _this=this
$ajax({
method:'get',
url:'/book1/'
success:function(){
_this.xx = res
}
}
}
-
使用fetch发送请求
methods:{
get_fetch() {
//发送请求
fetch("/book1/").then(res => res.json()).then(res => {
console.log(res)
this.book_obj = res
})
}
}
2 计算属性
写在 computed :{
}, 中
<!-- 计算属性优点--><!-- 1 在同一个页面中使用多次计算属性,不会多次执行--><!-- 2 不需要加括号,直接使用-->
eg:
<script src="./js/vue.js"></script>
<div id="app">
<input type="text" v-model='name'>
<br>
您输入的是:{{get_name()}}
<br>
您输入的是2:{{get_name()}}
<hr>
<!-- 您输入的是:{{name.substring(0,1).toUpperCase()+name.substring(1)}}-->
<!-- 计算属性优点-->
<!-- 1 在同一个页面中使用多次计算属性,不会多次执行-->
<!-- 2 不需要加括号,直接使用-->
<br>
计算属性:您输入的是:{{upper_name}}
<br>
计算属性2:您输入的是:{{upper_name}}
计算属性2:您输入的是:{{upper_name}}
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
name:''
},
computed:{
upper_name(){
console.log('计算属性我执行了')
return this.name.substring(0,1).toUpperCase()+this.name.substring(1)
},
},
methods:{
get_name(){
console.log('get_name我执行了')
return this.name.substring(0,1).toUpperCase()+this.name.substring(1)
},
}
})
</script>
</html>
3 虚拟dom和diff算法
4 组件介绍,全局组件,局部组件
4.1全局组件
4.2 局部组件
5 组件通信之父传子
-
关键参数
-
验证属性
// 属性验证
props:{
myname:String,
myshow:Boolean
},
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<myheader :myname="name" :myshow="false"></myheader>
{{obj.length}}
</div>
</body>
<script>
// 定义一个全局组件
//组件可以有data,methods,computed....,但是data 必须是一个函数
Vue.component('myheader', {
template: `
<div>
<h1 >我是全局组件:{{myname}}</h1>
<button @click="handleClick">点我弹出美女</button>
<br>
{{myshow}}
<hr>
<child v-if=""></child>
</div>
`,
data(){
return {
name:'lqz'
}
},
methods:{
handleClick(){
alert('美女')
}
},
mounted(){},
computed:{
},
components:{
child:{
template: `<div>
<span>{{age}}</span>
</div>`,
data(){
return {
age:19
}
},
methods:{
}
}
},
// props:['myname'] , //注册一下
// 属性验证
props:{
myname:String,
myshow:Boolean
},
})
var vm = new Vue({
el: '#app',
data: {
name:'egon'
},
})
</script>
</html>

浙公网安备 33010602011771号