Vue组件间传值--三种常用传值
- 父组件传值给子组件,首先父组件发送的形式是用bind(用缩写:)绑定值到子组件身上。然后子组件用属性props接收。
- 子组件传值父组件,首先是子组件发送的形式是this.$emit(事件名,需要发送的值),事件名:父组件on监听的方法,父组件第一件事就是监听子组件发送过来的事件名,@事件名=获取值的方法。获取值的方法(值)*,就这样拿到了儿子发过来的值
- 兄弟传值,两个都要引入公共js->bus。首先是发送者,this.$emit(名字,值)。然后是接受者,this.$on("传过来的那个名字",函数(值)),这里要注意的是接受者的这个监听事件应该是放在钩子mounted事件内。同时注意this指向问题。(可用封装方法)
父组件向子组件进行传值:
父组件:
<template> <div> 父组件: <input type="text" v-model="name" /> <br /> <br /> <!-- 引入子组件 --> <child :inputName="name"></child> </div> </template> <script> import child from "./child"; export default { components: { child }, data() { return { name: "" }; } }; </script>
子组件:
<template> <div> 子组件: <span>{{ inputName }}</span> </div> </template> <script> export default { // 接受父组件的值 props: { inputName: String, required: true } }; </script>
子组件向父组件传值
子组件:
<template> <div> 子组件: <span>{{ childValue }}</span> <!-- 定义一个子组件传值的方法 --> <input type="button" value="点击触发" @click="childClick" /> </div> </template> <script> export default { data() { return { childValue: "我是子组件的数据" }; }, methods: { childClick() { // childByValue是在父组件on监听的方法 // 第二个参数this.childValue是需要传的值 this.$emit("childByValue", this.childValue); } } }; </script>
父组件:
<template> <div> 父组件: <span>{{ name }}</span> <br /> <br /> <!-- 引入子组件 定义一个on的方法监听子组件的状态--> <child v-on:childByValue="childByValue"></child> </div> </template> <script> import child from "./child"; export default { components: { child }, data() { return { name: "" }; }, methods: { childByValue: function(childValue) { // childValue就是子组件传过来的值 this.name = childValue; } } }; </script>
非父子组件进行传值
非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。
公共bus.js
//bus.js import Vue from 'vue' export default new Vue()
组件A:
<template> <div> A组件: <span>{{ elementValue }}</span> <input type="button" value="点击触发" @click="elementByValue" /> </div> </template> <script> // 引入公共的bug,来做为中间传达的工具 import Bus from "./bus.js"; export default { data() { return { elementValue: 4 }; }, methods: { elementByValue: function() { Bus.$emit("val", this.elementValue); } } }; </script>
组件B:
<template> <div> B组件: <input type="button" value="点击触发" @click="getData" /> <span>{{ name }}</span> </div> </template> <script> import Bus from "./bus.js"; export default { data() { return { name: 0 }; }, mounted: function() { var vm = this; // 用$on事件来接收参数 Bus.$on("val", data => { console.log(data); vm.name = data; }); }, methods: { getData: function() { this.name++; } } }; </script>
文章标题:Vue传值--三种常用传值
文章来源:https://segmentfault.com/a/1190000015727078
文章快照:Vue传值--三种常用传值
文章评论