平时在使用Vue框架的业务开发中,组件不仅仅要把模板的内容进行复用,更重要的是组件之间要进行通信。组件之间通信分为三种:父-子、子-父;跨级组件通信。下面,就组件间如何通信做一些总结。
在组件中,使用选项道具来声明需要从父级组件接受的数据,道具的值可以是两种:一种是字符串数组,一种是对象. props中声明的数据与组件数据函数返回的主要区别在于道具来自父级,而数据中的组件是自己的数据,作用域是组件本身,这两种数据都可以在模板模板及计算属性和计算方法方法中使用。如以下例子:
//父组件ParentComponent & lt; template> & lt; div类=案缸榧北? & lt; h3>这是一个父组件& lt;/h3> & lt; ChildComponent: parentMessage=" parentMessage "/比; & lt;/div> & lt;/template> & lt; script> 从“进口ChildComponent。/ChildComponent ' 出口默认{ 名称:“ParentComponent”, 数据(){ 返回{ parentMessage:“这是来自父组件的数据的 } }, 组件:{ ChildComponent } } & lt;/script>//子组件ChildComponent & lt; template> & lt; div类=白幼榧北? & lt; h3>这是一个子组件& lt;/h3> & lt; h4> {{parentMessage}} & lt;/h4> & lt;/div> & lt;/template> & lt; script> 出口默认{ 名称:“ChildComponent”, 道具(“parentMessage”): } & lt;/script>
//ParentComponent父组件 & lt; template> & lt; div类=案缸榧北? & lt; h3>这是一个父组件总:{{总}}& lt;/h3> & lt; ChildComponent: parentMessage=" parentMessage”:总=白堋盄handleAdd10=癵etTotal”/比; & lt;/div> & lt;/template> & lt; script> 从“进口ChildComponent。/ChildComponent ' 出口默认{ 名称:“ParentComponent”, 数据(){ 返回{ parentMessage:“这是来自父组件的数据的, 总:10, } }, 组件:{ ChildComponent }, 方法:{ getTotal () { this.total=总; 控制台。日志(“ParentComponent总:”,总); } } } & lt;/script>//ChildComponent子组件 & lt; template> & lt; div类=白幼榧北? & lt; h3>这是一个子组件& lt;/h3> & lt; h4> {{parentMessage}} & lt;/h4> & lt;按钮@click=" handleAdd10 "祝辞+ 10按钮& lt;/button> & lt;/div> & lt;/template> & lt; script> 出口默认{ 名称:“ChildComponent”, 道具:“parentMessage”,“总”, 方法:{ handleAdd10 () { 让总=this.total + 10; 控制台。日志(ChildComponent排放:美元); 美元。发出(handleAdd10,总); } } } & lt;/script>
结果:
//ParentComponent改动如下 Arunachal Pradesh, & lt; h3>这是一个父组件总:{{总}}& lt;/h3> & lt; ChildComponent: parentMessage=" parentMessage”:总=白堋盄handleAdd10=癵etTotal”/比; & lt; InputComponent v模型=白堋?比; Arunachal Pradesh, & lt; script> 从“进口InputComponent。/InputComponent ' & lt;/script> Arunachal Pradesh,//InputComponent子组件 & lt; template> & lt;输入类型=拔谋尽盄input=皍pdateValue(事件)美元”在 & lt;/template> & lt; script> 出口默认{ 名称:“InputComponent”, 方法:{ updateValue (evt) { 美元。排放(“输入”,evt.target.value) } } } & lt;/script>