Home > Article > Web Front-end > vuejs uses $emit and $on to pass values between components
$emit and $on can transfer values between components. We know that parent components use props to transfer values to child components, but child components are not allowed to transfer values to parent components. This can be achieved by using this. This article mainly introduces examples of vuejs using $emit and $on to transfer values between components. It has certain reference value. If you are interested, you can learn about it. I hope it can help everyone.
Note: The $emit and $on events must be on a public instance to be triggered.
Example: I want to implement the address book function of a certain system. On the web side, we can use the ztree plug-in based on jQuery to display the directory. However, in the vuejs framework, the tree directory needs to be implemented through recursive components.
1. Now there are two components, the parent component contact_index.vue and the child component cust_tree.vue
##2. Click inside the parent component Select a bank and jump out of the bank tree directory structure (implemented using the recursive component of vuejs). Two values need to be passed:import Vue from 'vue' export var bus = new Vue()Secondly, the parent component is defined in created $on listens for events
//父组件与子组件都要import bus.js import {bus} from '../../bus.js'
created(){ bus.$on('custTreeSay',(id)=>{ //监听传值--机构代码 this.instCode = id; //关闭弹窗 this.popupVisibleTree = false; //调用查询方法刷新通讯录列表 this.query(); }); bus.$on('custTreeSayName',(name)=>{ //监听传值--机构名称 this.instName = name; }); }Finally, define the click event in the child component, call the parent component method and pass the corresponding value through $emit Pass it to the parent component
<span @click="propInstCode(model);propInstName(model)"> {{model.name}} </span>
<script type="text/javascript"> import {bus} from '../../bus.js' export default { props: ['model'],//这里通过props接收父组件的传值 //method钩子定义传值方法,这边需要传不同的值 methods: { //通过总线将值传给父组件 propInstCode:function (model) { //$emit触发当前实例事件 bus.$emit('custTreeSay',this.model.id); }, propInstName:function (model) { bus.$emit('custTreeSayName',this.model.name); } }, }This way, the child component can pass the value to the bus through $emit and then pass it to the parent component. Finally, the passed institution code is passed to the backend for query, but we also need the corresponding institution name to display to the customer, so we only need to set two inputs here, and the input of the institution code is hidden. If a value needs to be passed, the input of another institution name can be displayed, as follows:
##
//将点击跳出目录选择的方法放到显示的机构选择就可以了 <p class="query_condition_item"> <label>选择机构</label> <input name="instName" v-model="instName" readonly @click="showTree()"> </p> <p class="query_condition_item"> <input name="instCode" v-model="instCode" hidden> </p>
The above is the detailed content of vuejs uses $emit and $on to pass values between components. For more information, please follow other related articles on the PHP Chinese website!