组件父传子:
子组件中使用 props 接收父组件传过来的值。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 
 | // 父传子:<div id="app">
 <cpn :cmessage='message' :cmovies='movies'></cpn>
 </div>
 
 const cpn = {
 template: '#cpn',
 // 1.数组写法
 // props: ['cmessage', 'cmovies'],
 // 2.对象写法(常用)
 props: {
 // 2.1 类型的限制
 // cmessage: String,
 // cmovies: Array
 // 2.2 提供默认值  及必传值
 cmessage: {
 type: String,
 default: 'aaaa',
 required: true
 },
 cmovies: {
 type: Array,
 // default: []    vue2.5.x 以下可以
 default(){
 return []
 }
 }
 },
 data(){
 return {}
 }
 }
 
 const app = new Vue({
 el: '#app',
 data: {
 message: '你好啊',
 movies: ['海王', '海贼王', '海尔兄弟']
 },
 components:{
 cpn: cpn
 }
 })
 
 | 
组件子传父:
子组件使用 $emit 发送 自定义事件并可携带参数,父组件使用绑定自定义事件触发自身定义的方法,在自身定义的方法中接收到携带的参数。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 
 | <cpn @itemclick='btnClick'></cpn>
 <template id="cpn">
 <div>
 <button v-for="item in cts" @click="btnClick(item)">{{item.name}}</button>
 </div>
 </template>
 
 //子组件
 const cpn = {
 template: '#cpn',
 data(){
 return {
 cts:[
 {id: 'aaa', name: '热门推荐'},
 {id: 'bbb', name: '手机数码'},
 {id: 'ccc', name: '家用家电'},
 {id: 'ddd', name: '电脑办公'}
 ]
 }
 },
 methods: {
 btnClick(item){
 // console.log(item);
 // 向父组件 发射事件: 自定义事件
 this.$emit('itemclick',item)
 }
 }
 }
 //父组件
 const app = new Vue({
 el: '#app',
 data: {
 info: {
 name: 'roc',
 age: 18,
 height: 180
 }
 },
 components:{
 cpn
 },
 methods:{
 btnClick(item){
 console.log('btnClick',item)
 }
 }
 })
 
 | 
父组件访问子组件:
通过给子组件添加属性 ref ,父组件可以用 $refs 拿到子组件对象。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | <div id="app"><cpn ref='bbb'></cpn>
 <cpn ref='aaa'></cpn>
 <cpn></cpn>
 <button @click="btnclick">按钮</button>
 </div>
 
 methods: {
 btnclick(){
 // 用的比较少依  赖于下标 $children (数组类型)
 // console.log(this.$children);
 // this.$children[0].showMessage()
 // console.log(this.$children[0].name)
 
 // 用的多 $refs  (对象类型)
 console.log(this.$refs.aaa.name);
 }
 },
 
 | 
子组件访问父组件(使用较少):
子组件使用 $parent 可访问到父组件对象,使用 $root 可访问到根组件
| 12
 3
 4
 5
 6
 7
 8
 
 | methods: {						btnClick(){
 //  $parent  为了组件的复用性 子访问父 用的少
 console.log(this.$parent.name)
 //  $root  访问根组件 用的少
 console.log(this.$root.message)
 }
 }
 
 |