前端-vue父子组件
一、父子组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<mycomponent></mycomponent>
</div>
<template id="mytemplate">
<div>
<h1>这是父组件的h1标签</h1>
<subcomponents></subcomponents>
</div>
</template>
</body>
<script>
let obj = {
template : '#mytemplate',
data() {
return {
welcome : 'hello'
}
},
components : {
subcomponents : {
template : `<div>这是一个子组件</div>`
}
}
}
let app = new Vue({
el : '#app',
components : {
mycomponent : obj
}
})
</script>
</html>
1.父传子
1.1第一种方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<mycomponent></mycomponent>
</div>
<template id="mytemplate">
<div>
<h1>这是父组件的h1标签</h1>
<subcomponents msg="hello world"></subcomponents>
</div>
</template>
</body>
<script>
let obj = {
template : '#mytemplate',
data() {
return {
welcome : 'hello'
}
},
components : {
subcomponents : {
template : `<div>这是一个子组件,用来接收父组件传过来的值:{{ msg }} </div>`,
props : ['msg']
}
}
}
let app = new Vue({
el : '#app',
components : {
mycomponent : obj
}
})
</script>
</html>
1.2第二种方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<mycomponent></mycomponent>
</div>
<template id="mytemplate">
<div>
<h1>这是父组件的h1标签</h1>
<subcomponents :msg="welcome"></subcomponents>
</div>
</template>
</body>
<script>
let obj = {
template : '#mytemplate',
data() {
return {
welcome : 'hello'
}
},
components : {
subcomponents : {
template : `<div>这是一个子组件,用来接收父组件传过来的值: {{msg}} </div>`,
props : ['msg']
}
}
}
let app = new Vue({
el : '#app',
components : {
mycomponent : obj
}
})
</script>
</html>
2.子传父
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<mycomponent></mycomponent>
</div>
<template id="mytemplate">
<div>
<h1>这是父组件的h1标签,用来接收子组件传过来的数据: {{msg}} </h1>
<subcomponents @childmsg="get"></subcomponents>
</div>
</template>
</body>
<script>
let obj = {
template: '#mytemplate',
data() {
return {
msg: ''
}
},
methods: {
get(msg) {
this.msg = msg
}
},
components: {
subcomponents: {
template: `<div>这是一个子组件。
<input type='button' value='给父组件发送数据' @click='send'>
</div>
`,
data() {
return {
message: '这是子组件向父组件发送的数据'
}
},
methods: {
send() {
this.$emit('childmsg', this.message)
}
},
},
}
}
let app = new Vue({
el: '#app',
components: {
mycomponent: obj
}
})
</script>
</html>
3.非父子组件传值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="app">
<com1></com1>
<com2></com2>
</div>
</body>
<script>
var bus = new Vue()
Vue.component('com1',{
template : `<div>这是组件一,现在用来接收组件二发过来的值:{{count}} </div>`,
data() {
return {
count : 0
}
},
created() {
let $this = this
bus.$on('jianting',function(value){
$this.count = value
})
},
})
Vue.component('com2',{
template : `<div>这是组件二,现在给组件一发送数据 <button @click='add'>发送</button> </div>`,
data() {
return {
}
},
methods: {
add(){
var ran = Math.floor(Math.random() * 10)
console.log(ran)
bus.$emit('jianting',ran)
}
},
})
let app = new Vue({
el : '#app'
})
</script>
</html>