当前位置: 首页 > Web前端 > CSS

Vue组件之间的传值(通信)

时间:2023-03-31 11:16:14 CSS

组件之间的通信分为三种:父到子,子到父,兄弟到兄弟,组件1父组件到子组件,子组件嵌套在父组件内部,父组件传递一个标识符给子组件,由子组件内部的props接收,子组件可以在模板中以{{}}的形式使用。如果父组件传递给子组件的标识符中包含-,则子组件将以驼峰形式接收。父组件调用子组件的地方,添加自定义属性,属性名随便定义(但不要定义id,class等),属性值就是你需要传递的值(这个值可以是变量,如果是变量,则使用绑定属性)在定义子组件的地方,添加一个选项props,它是一个数组。数组中的元素是父元素提供的属性名称。然后,在子组件内部,可以直接使用父组件中定义的属性名来获取传递的属性值。2子组件传值给父组件,子组件传值给父组件(比起父亲传给子要麻烦一点,我们常说人往高处,而水流向低处,如果要让水流到地面,至少我们需要一个管道,管道是子组件向父组件传值的通道)在子组件中,定义一个事件标识符---to-parent(相当于定义通道)(注意命名不要驼峰)然后在父组件调用子组件的地方传递this.$emit('to-parent',传递的值),执行这个事件,-----事件IDto-parent父组件实现getMoney方法,获取的值就是从中传过来的值子组件给父组件

我是孩子给钱toparents
Clicks{{count}},这个月孩子做了{{money}}元
constSon={template:"#son",data(){return{}},methods:{giveMoney(val){//你申请一张卡,把卡给你父母,你寄钱this.$emit('to-parent',val)}}}//1.定义组件-组件的第一个字母必须大写constTest={template:"#test",data(){return{money:0}},methods:{getMoney(val){this.money=val}},components:{'v-son':Son}}3非父子值transfer我个人认为非父子之间的值传递是组件值传递中最麻烦的一个,你说难她难,说简单也简单。我们只需要定义一方负责监控,另一方负责触发即可,相互价值传递是基于centraleventbus,也就是newvue,相当于机场里的塔台,被指挥$on负责监听事件,$emit负责触发事件和传递参数,如果有A和B两个组件,如果A要给B传递一个值,B必须先监听A,比较麻烦中央事件总线(飞机塔,邮递员的故事)在src下创建bus.jsvarbus=newVue()//centraleventbusexportdefaultbus;如果有两个组件AB,在A组件中引入buscentral事件总线,在A组件方法中向B组件发送消息:{sendData(val){bus.$emit("A-B",val)}}mounted(){bus.$on("B-A",function(val){console.log(val)})}在B组件中接收mounted(){bus.$on("A-B",function(val){console.log(val)bus.$emit("B-A",val)})}如果AB组件有2次交互,则有4个事件,如果有3个事件,则有6个事件。其实最麻烦的不是它们之间,而是定义它们之间的事件名称。如果没有一套完整的定义事件名称的规则,就会不合理地增加项目开发周期,降低开发效率,增加代码的耦合度,同时也会降低可维护性。低的。所以不建议在main.js中使用vue.prototype.$bus=newVue()在原型上扩展一个$bus而不创建bus文件,通过this.$bus.$on()来使用