1、通过关键字sync进行绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<p>父组件:{{ title }}</p>
<hr>
<custon :title.sync="title" :cunt.sync=‘cunt‘></custon>
</div>
</body>
<script src="./vue.js"></script>
<script>
/*
对props进行双向绑定
sync关键字 update是固定写法关键字-----this.$emit(‘update:cunt‘,‘str‘)
*/
Vue.component(‘custon‘,{
props:[‘title‘,‘cunt‘],
template:`
<div class="box">
<h2>{{ title }}</h2>
<div>
{{cunt}}
</div>
<button @click="cheng">
按钮
</button>
</div>
`,
methods:{
cheng(){
console.log("123")
this.$emit(‘update:title‘,‘子组件改变‘)
this.$emit(‘update:cunt‘,‘2‘)
}
}
})
new Vue({
el:"#app",
data:{
title:‘父组件的title‘,
cunt:1
}
})
</script>
</html>
2、通过v-model对组件进行绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<p>父组件:{{ obj.title }}</p>
<hr>
<custon v-model=‘obj‘></custon>
</div>
</body>
<script src="./vue.js"></script>
<script>
/*
这里的v-model是属于一个自定义的绑定
title是绑定的数据
子组件通过 props来接收一个value
子组件通过$emit来绑定input事件来进行双向绑定----this.$emit(‘input‘,‘子组件改变‘)
*/
Vue.component(‘custon‘,{
props:[‘value‘],
template:`
<div class="box">
<h2>{{ value.title }}</h2>
<div>{{ value.center }}</div>
<div>{{ value.sum }}</div>
<button @click="cheng">
按钮
</button>
</div>
`,
data(){
return {
Zobj:{}
}
},
methods:{
cheng(){
console.log(this.value)
let objs = {
title:‘子组件title‘,
center:‘子组件内容‘,
sum:"bbb"
}
this.$emit(‘input‘,objs)
}
}
})
new Vue({
el:"#app",
data:{
obj:{
title:‘父组件title‘,
center:‘父组件内容‘,
sum:‘aaa‘
},
}
})
</script>
</html>
3、通过v-model和组件进行绑定,传输一个对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<p>父组件:</p>
<p>1、{{ arr.list[0] }}</p>
<p>2、{{ arr.list[1] }}</p>
<p>{{arr.bbq}}</p>
<hr>
<custon v-model=‘arr‘></custon>
</div>
</body>
<script src="./vue.js"></script>
<script>
/*
这里的v-model是属于一个自定义的绑定
arr是绑定的数据
子组件通过 props来接收一个value
子组件通过$emit来绑定input事件来进行双向绑定----this.$emit(‘input‘,‘子组件改变‘)
*/
Vue.component(‘custon‘,{
props:[‘value‘],
template:`
<div class="box">
{{value}}
<button :class="value.list[0]" @click="cheng">
按钮
</button>
</div>
`,
methods:{
cheng(){
console.log(this.value)
let arr2 = {
list:this.value.list.reverse(),
bbq:!this.value.bbq
}
this.$emit(‘input‘,arr2,)
}
}
})
new Vue({
el:"#app",
data:{
arr:{
list:[‘a‘,‘b‘],
bbq:false
}
},
updated(){
console.log("数据发生了改变")
console.log(this.arr.bbq)
}
})
</script>
<style>
.a{
display:block;
width:50px;
height:50px;
background:#FAF;
}
.b{
display:block;
width:50px;
height:50px;
background:#F60;
}
</style>
</html>