Vue组件间传递参数
父子间传递参数
通过props属性来传递
<!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>父-子</title> <script type="text/javascript" src='js/vue.js'></script> <script> window.onload = function(){ new Vue({ el:'#my', data:{ obj:{name:'老张',age:50} }, components:{ // 局部组件 'my-parent':{ //组件的名称 template:'#my-parent', data(){ return { obj:{name:'小张',age:20} } }, props:['data'], components:{ 'my-child':{ template:'#my-child', data(){ return { } }, props:['data'] } } } } }) } </script> <template id="my-parent"> <div> <h1>我是父组件</h1> <p>姓名:{{data.name}}</p> <p>年龄:{{data.age}}</p> <my-child :data="obj"></my-child> </div> </template> <template id="my-child"> <div> <h1>我是子组件</h1> <p>姓名:{{data.name}}</p> <p>年龄:{{data.age}}</p> </div> </template> </head> <body> <div id="my"> <my-parent :data="obj"></my-parent> </div> </body> </html>
子组件传递参数到父组件
vm.$emit( event, arg ) //触发当前实例上的事件
vm.$on( event, fn );//监听event事件后运行
<!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>子-父</title> <script type="text/javascript" src='js/vue.js'></script> <script> window.onload = function(){ new Vue({ el:'#my', data:{ obj:{name:'老张',age:50} }, components:{ // 局部组件 'my-parent':{ //组件的名称 template:'#my-parent', data(){ return { obj:{name:'小张',age:20}, childHobby:'' } }, methods:{ get:function(childData){ //子发送消息的触发方法 this.childHobby = childData; //把子的值赋给另一个变量 } }, props:['data'], components:{ 'my-child':{ template:'#my-child', data(){ return { hobby:'打篮球' } }, props:['data'], methods:{ send:function(){ this.$emit('abc',this.hobby) //$emit('发射名称',参数) } } } } } } }) } </script> <template id="my-parent"> <div> <h1>我是父组件</h1> <p>姓名:{{data.name}}</p> <p>年龄:{{data.age}}</p> <p>儿子的爱好:{{childHobby}}</p> <my-child :data="obj" v-on:abc="get"></my-child> </div> </template> <template id="my-child"> <div> <h1>我是子组件</h1> <p>姓名:{{data.name}}</p> <p>年龄:{{data.age}}</p> 我的爱好:<input type="text" v-model="hobby" @input="send()"/> <button @click="send()">子传父</button> </div> </template> </head> <body> <div id="my"> <my-parent :data="obj"></my-parent> </div> </body> </html>
兄弟间传递参数
<!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>兄弟</title> <script type="text/javascript" src='js/vue.js'></script> <script> window.onload = function(){ new Vue({ el:'#my', data:{ obj:{name:'老张',age:50}, childHobby:'' }, methods:{ get:function(childData){ //获取小明的值 this.childHobby = childData; //获取的值传给childHobby } }, components:{ // 局部组件 'my-brother-a':{ //组件的名称 template:'#my-brother-a', data(){ return { obj:{name:'大明',age:20} } }, props:['hobby'] }, 'my-brother-b':{ //组件的名称 template:'#my-brother-b', data(){ return { obj:{name:'小明',age:18,hobby:'打游戏'} } }, methods:{ send:function(){ this.$emit('pass',this.obj.hobby) //传给父 } } } } }) } </script> <template id="my-brother-a"> <div> <h1>我是大哥</h1> <p>姓名:{{obj.name}}</p> <p>年龄:{{obj.age}}</p> <p>小明的爱好:{{hobby}}</p> </div> </template> <template id="my-brother-b"> <div> <h1>我是弟弟</h1> <p>姓名:{{obj.name}}</p> <p>年龄:{{obj.age}}</p> 我的爱好:<input type="text" v-model="obj.hobby" @input="send()"/> <button @click="send()">子传父</button> </div> </template> </head> <body> <div id="my"> {{childHobby}} <my-brother-a :hobby="childHobby"></my-brother-a> <my-brother-b v-on:pass="get"></my-brother-b> </div> </body> </html>
方式B
<!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>兄弟</title> <script type="text/javascript" src='js/vue.js'></script> <script> window.onload = function(){ var vm = new Vue(); //定义一个空的对象 相当于第三方 var a = { //组件的名称 template:'#my-a', data(){ return { name:'A组件' } }, methods:{ send:function(){ vm.$emit('data-a',this.name);//发射 } } }; var b = { //组件的名称 template:'#my-b', data(){ return { nameA:'' } }, mounted:function(){ //生命周期 vm.$on('data-a',item =>{ //接收 data-a接收名称 item参数 this.nameA = item; }) } }; new Vue({ el:'#my', data:{ obj:{name:'老张',age:50} }, components:{ // 局部组件 'my-a':a, 'my-b':b } }) } </script> <template id="my-a"> <div> <h1>我是A组件</h1> <button @click="send()">发送到B</button> </div> </template> <template id="my-b"> <div> <p>B组件</p> <h1>{{nameA}}</h1> </div> </template> </head> <body> <div id="my"> <my-a></my-a> <my-b></my-b> </div> </body> </html>

浙公网安备 33010602011771号