vue组件之间的数据通信

1、通过路由带参数传值

①定义路由时加上参数props: true,在定义路由路径时要留有参数占位符: name『用法: to="'路径/'+value"』

②在跳转到的页面加上参数props:['name']

③在跳转到的页面就获取到了name[用法: js中直接this. name;html中直接插值{{ name}}]

2、父组件向子组件传值

①父组件内设置要传的数据『data(){ id: value}』

②在父组件中引用的子组件上绑定一个自定义属性并把数据绑定在自定义属性上『< myBtn :atrid='id'></ mybtn>』

③在子组件添加参数props:['atrid'],即可

3、子组件向父组件传值

①由于父组件需要参数,所以在父组件中的标签上定义自定义事件,在事件内部获取参数;『@myEvent=" callback"在callback函数中接收参数』

②在子组件中触发自定义事件,并传参。『this.$ emit('父组件中的自定义事件',参数)』

组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。

一般来说,组件可以有以下几种关系:

 A和B 、  B和C、B和D都是父子关系,C和D是兄弟关系,A和CD是隔代关系

props 

父组件A通过props的方式向子组件B传递,B to A 通过在B组件中$emit, A 组件中v-on的方式实现。

1. 父组件向子组件传值

 1 // Parent.vue 父组件
 2 <template>
 3   <div id="app">
 4     <Children :users="users"></Children>
 5   </div>
 6 </template>
 7 
 8 <script>
 9   import Children from './Children'
10   export default {
11     name: "Parent",
12     components: {
13       Children
14     },
15     data() {
16       return {
17         users: ['aa','bb','zy']
18       }
19     }
20   }
21 </script>
22 
23 <style scoped>
24 
25 </style>
 1 // 子组件
 2 <template>
 3   <div class="hello">
 4     <ul>
 5       <li v-for="user in users">{{user}}</li>// 遍历传递过来的值,然后呈现到页面
 6     </ul>
 7   </div>
 8 </template>
 9 
10 <script>
11   export default {
12     name: "children",
13     props:{
14       users: {
15         type: Array,
16         required: true
17       }
18     }
19   }
20 </script>
21 
22 <style scoped>
23 
24 </style>

父组件通过props 向下传递数据给子组件。

注意:组件中的数据共有三种形式: data、props、computed

2. 子组件向父组件传值(通过事件形式)$emit

 1 // 子组件 children.vue
 2 <template>
 3   <div class="hello">
 4 <!--    <ul>-->
 5 <!--      <li v-for="user in users">{{user}} 我问问</li>// 遍历传递过来的值,然后呈现到页面-->
 6 <!--    </ul>-->
 7 
 8     <button @click="toParamParent">子向父传值</button>
 9   </div>
10 </template>
11 
12 <script>
13   export default {
14     name: "children",
15     // props:{
16     //   users: {
17     //     type: Array,
18     //     required: true
19     //   }
20     // },
21     methods: {
22       toParamParent() {
23         this.$emit('childrenToParent','lalala')
24       }
25     }
26   }
27 </script>
28 
29 <style scoped>
30 
31 </style>
 1 // 父组件
 2 <template>
 3   <div id="app">
 4 <!--    <Children :users="users"></Children>-->
 5     <Children @childrenToParent="updateHtml"></Children>
 6     <h1>{{title}}</h1>
 7     <h2>{{childrenParam}}</h2>
 8 
 9   </div>
10 </template>
11 
12 <script>
13   import Children from './Children'
14   export default {
15     name: "Parent",
16     components: {
17       Children
18     },
19     data() {
20       return {
21         users: ['aa','bb','cc'],
22         title: '触发button, 子组件传递数据',
23         childrenParam: ''
24       }
25     },
26     methods: {
27       updateHtml(e){
28         // console.log(e)  e是传递过来的数据 'ni hao mimi'
29         this.childrenParam = e
30       }
31     }
32   }
33 </script>
34 
35 <style scoped>
36 
37 </style>

总结: 子组件通过events给父组件发送消息,实际上就是子组件把自己的数据发送到父组件

posted @ 2022-05-11 23:06  LLLLY  阅读(78)  评论(0)    收藏  举报