vue 组件之间的传值

组件之间的传值有三种  1,父组件给子组件传值 ,   2,子组件给父组件传值   3, 非父子组件之间的传值(又叫兄弟组件传值)

1。父组件给子组件传值   (父组件给子组件传值需要通过props)

首先我的页面结构是这样的  child是子组件   father是父组件,

在这里我新建一个父组件  father.vue

<template>
  <div>
    <div>这是父组件</div>
    <!-- 使用组件child -->
    <child :name-list=‘names‘></child>
  </div>
</template>
<script>
import child from ‘./components/child.vue‘// 引入子组件child
export default {
  components:{
    child //注册组件
  },
  data(){
    return{
      names:[]
    }
  },
  mounted(){
    // 请求数据
    this.$axios.get(‘https://www.daxunxun.com/douban‘).then(res=>{
      console.log(res.data);
      this.names=res.data
    });
  },
}
</script>

然后子组件中  child.vue

<template>
  <div>
    <ul>
      <li v-for=‘(item,index) in nameList‘ :key=‘index‘>{{item.title}}</li>
    </ul>
  </div>
</template>
<script>
export default {
  data(){
    return{}
  },
  // 第一种
  // props:[‘nameList‘],也可以直接这样写

  // 第二种
  // props: {
  //   nameList: Array/String/Obj
  // },

  // 第三种
  // props: {
  //   nameList: { // 自定义的属性
  //     type: Array/Object, // 数据类型为数组或者对象
  //     default: function () { // 默认值必须为函数,但是返回数组或对象
  //       return [1,2,3]/{}
  //     }
  //   }
  // },

  // 我使用的是第三种
  props: {
    nameList: { // 自定义的属性
      type: Array, // 数据类型为数组或者对象
      default: function () { // 默认值必须为函数,但是返回数组或对象
        return []
      }
    }
  },
}
</script>

这样就完成的父组件给子组件的传值。

总结:

  1。新建子组件和父组件,在父组件中引入子组件

  2. 在调用child的地方 在child身上添加一个自定义的属性 name-list  这个属性名可以随便取 尽量语义化  names就是你要传递的值 因为names是个变量 所以要结合绑定属性 :

   <child :name-list=‘names‘></child>

  3.在定义子组件的js中添加一个props选项  根据你传递的数据类型定义props   在这以下有三种参考 

// 第一种

// props:[‘nameList‘],也可以直接这样写

// 第二种

// props: {

//   nameList: Array/String/Obj

// },

// 第三种

// props: {

//   nameList: { // 自定义的属性

//     type: Array/Object, // 数据类型为数组或者对象

//     default: function () { // 默认值必须为函数,但是返回数组或对象

//       return [1,2,3]/{}

//     }

//   }

// },

这样就完成了一个简单的父给子传的值。

注意:注册子组件的时候路径引入正确,

2.子组件給父组件传值 (通过自定义事件传值)

father.vue  添加一个自定义事件

<template>
  <div>
    <div>这是父组件</div>
    <!-- 使用组件child -->
    <!-- @to-Father  自定义的事件 -->
    <child @to-Father="getData"></child>
  </div>
</template>
<script>
import child from ‘./components/child.vue‘// 引入子组件child
export default {
  components:{
    child //注册组件
  },
  data(){
    return{
    }
  },
  methods:{
    getData(data){
      console.log(data,‘data为子组件传过来的值‘)
    }
  }
}
</script>

在子组件child.vue

<template>
  <div>
    <button @click="toFather">我是子组件</button>
  </div>
</template>
<script>
export default {
  data(){
    return{}
  },
  methods:{
    toFather() {
      // 通过$emit  this.$emit(‘父组件自定义绑定的事件‘, 子组件传给父组件的值)
      this.$emit(‘to-Father‘,‘子组件传给父组件的值‘)
    }
  }
}
</script>

总结:

  1.子组件给父组件传值主要通过自定义事件

  2.在定义子组件的地方去执行this.$emit(‘to-Father‘,‘子组件传给父组件的值‘)

3.非父子组件传值/兄弟组件传值  利用中央事件总线传值 const bus = new Vue()

结构:

首先我们需要利用中央事件总线传值 const bus = new Vue()

在main.js中,new一个空的vue挂在到vue原型上:

Vue.prototype.$bus = new Vue();这样两者才可以进行通讯

下面我们让哥哥two组件给兄弟one组件传递一个数据 one.vue

this.$bus.$emit(‘to-two‘, ‘您好兄弟two‘)

one组件传值 bus.$emit(‘事件名称1‘, ‘传递数据‘)
<template>
  <div>
    <button @click="toTwo">我是哥哥one组件</button>
  </div>
</template>
<script>
export default {
  data(){
    return{
    }
  },
  // 开始传递给two组件
  methods:{
    toTwo(){
      console.log(‘1111111111‘)
      this.$bus.$emit(‘to-two‘, ‘您好兄弟two‘)
    }
  }
}
</script>

two组件接受数据 two.vue   data即为one组建传递过来的数据

<template>
  <div>
    <button>我是弟弟two组件</button>
  </div>
</template>
<script>
export default {
  data(){
    return{
    }
  },
  mounted () {
    this.$bus.$on(‘to-two‘, function (data) {
      console.log(data,‘data哥哥two组件传过来的数据‘)
    })
  },
}
</script>

结果:

two组件给one组件传值的方式一样就不介绍了

总结: 

     1.兄弟组件之间的传值需要利用中央事件总线进行通讯

     2.中央事件总线的建立我们可以这样

      在main.js中,new一个空的vue挂在到vue原型上:

      Vue.prototype.$bus = new Vue();这样两者才可以进行通讯

     3.一个组件进行传送数据 另一个组件进行接收数据

      A组件传值 this.$bus.$emit(‘事件名称1‘, ‘传递数据‘)
      B组件接受 this.$bus.$on(‘事件名称1‘, function (data) {})

      data即为传送过来的值

原文地址:https://www.cnblogs.com/toughy/p/11841086.html

时间: 2024-09-30 04:31:23

vue 组件之间的传值的相关文章

Vue组件之间的传值方法

在vue当中有两种组件之间的传值方法,分别是 * 父子组件* 之间的传值和* 非父子组件 *之间的传值方法 父子组件之间的传值方法 父子组件之间的传值分为两种 * 父组件给子组件传值 子组件给父组件之间的传值 父组件给子组件传值方法 // 父 <div id = "app"> <my-content></my-content> </div> // 子 <template id="content"> <

【vue组件之间互相传值:父传子,子传父】

今看到一篇很不错的vue组件传值文章,便于理解,遂做笔记- 一般页面的视图App.vue应为这样 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue2.Child.vue的中创建props,然后创建一个名为message的属性 3.在App.vue中注册Child组件,并在template中加入child标签,标签中添加message属性并赋值 4.保存修改的文件,查看浏览器 5.我们依然可以对message的值进行v-bind动态绑定 此

vue组件之间的传值方式

一.父组件向子组件传值方式 1.1父组件向子组件传数据方式 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta

vue 学习五 深入了解components(父子组件之间的传值)

上一章记录了 如何在父组件中向子组件传值,但在实际应用中,往往子组件也要向父组件中传递数据,那么此时我们应该怎么办呢 1.在父组件内使用v-on监听子组件事件,并在子组件中使用$emit传递数据 //父组件 <template> <div id="home"> <com test='12345' test2='1213232111111' @a_even="a_even"></com> //使用v-on监听子组件事件

vue中组件之间的传值

按照对象分类: 一.父子组件之间的传值 1.使用props和$emit 2.在引入的子组件中使用ref,通过this.$refs.xxx.方法/值来获取子组件中的方法或者值 3.子组件中使用this.$parent来获取父组件中的值或者方法 4.父组件中使用this.$children来获取子组件中的值或者方法 二.兄弟组件中的传值 1.使用eventBus作为中间件,然后使用$emit去抛出事件,使用$on去监听事件 这里要注意一些事项:a.bus.$emit在beforeDestroy中去触

事件总线bus解决兄弟组件之间的传值

原文引用https://www.dazhuanlan.com/2019/08/25/5d625951eff92/ 事件总线bus解决兄弟组件之间的传值 实际运用: 封装一个Bus.js 123 import Vue from 'vue'const Bus = new Vue()export default Bus 在组件调用时引入 组件一: 1234567891011121314 import Bus from './Bus' export default { data() { return {

Vue组件之间的传参

Vue组件之间的传参方式有三种 第一:父传子 第二:子传父 第三:兄弟之间相传 第一,父传子,顾名思义,外层组件传参给嵌套内部的组件 在父代中嵌套的标签 <son v-bind:toSon="fatherData"></son> //发送数据给子代 在子代中接收数据 需要添加一个属性叫做prpos props:["toSon"], <!DOCTYPE html> <html lang="en"> &

Vue 组件间的传值(通讯)

组件之间的通讯分为三种 父给子传 子给父传 兄弟组件之间的通讯 1 父组件给子组件传值 子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里可以通过{{}}的形式进行使用.如果父组件给子组件传递的标识中含有-,子组件在接收时采用驼峰式接收. 父组件调用子组件的地方, 添加自定义属性,属性名随便定义(但是不要定义id,class等) 属性值为你需要传递的值(这个值可以是变量,如果是变量则使用绑定属性) 定义子组件的地方, 添加一个选项props,它是一个

vue组件之间的数据传递

Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,components 文件夹下都是子组件. 一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从父组件获取 logo 的值,就需要使用 props: ['lo