IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue父组件与子组件的交互 -> 正文阅读

[JavaScript知识库]vue父组件与子组件的交互

1. 引言

1.1 编写目的

记录父组件与子组件的交互

1.2 背景介绍

父组件与子组件的交互包括四方面:
1)父组件向子组件传值;
2)父组件向子组件传递方法;
3)子组件向父组件传值;
4)子组件向父组件传递方法;

1.3 适用范围

开发人员。

1.4 参考资料

2. 父组件向子组件传值

  • 父组件向子组件传值:父组件在引用子组件的时候,通过属性绑定(v-bind)的形式,把数据传给传递给子组件
<template>
  <div>
    <h1>测试父组件向子组件传值,这是父组件</h1>
    <!-- 1.父组件向子组件传值:父组件在引用子组件的时候,通过属性绑定(v-bind)的形式,把数据传给传递给子组件 -->
    <Son v-bind:fatherObj="father"/>
  </div>
</template>


<script>
import Son from "./Son.vue";
export default {
  components: {
    Son
  },
  data () {
    return {
      father: {
        id: 1,
        name: '父亲:张三'
      },
    }
  },
  methods: {
    changeName (newName) {
      console.log("调用父组件方法fatherFn");
      this.father.name = newName
    }
  },
}
</script>
  • 子组件接收父组件传来的值:子组件使用props属性接收
<template>
  <div>
      <h2>测试父组件和子组件传值,这是子组件</h2>
      <p>我调用父组件中数据:{{fatherObj.name}}</p>
  </div>
</template>


<script>


export default {
  // 1. 父组件向子组件传值:子组件使用props属性接收
  props: ['fatherObj'], // 父组件传来的,只读
  components: {
  },
  data() {
    return {
      
    }
  },// 自带的,可读可写
  computed: {
  },
  watch: {},
  methods: {
    // 当点击子组件的时候,this.$emit()拿到父组件传过来的方法,并调用方法
    fatherFn(){
      console.log(this);
      this.$emit('func','李四')
    }
  },
}
</script>

3. 父组件向子组件传递方法

vue不建议子组件中直接修改父组件的数据,但是可以通过传递方法的形式达到修改数据的目的。

  • 父组件向子组件传递方法:使用事件绑定机制 v-on / @的形式,把方法传给传递给子组件
<template>
  <div>
    <h1>测试父组件向子组件传递方法,这是父组件</h1>
    <!-- 2.父组件向子组件传递方法:使用事件绑定机制 v-on / @ -->
    <!-- changeName代表引用,不能使用 changeName(),否则就直接调用了-->
    <Son v-bind:fatherName="father" v-on:func="changeName" />
  </div>
</template>

<script>
import Son from "./Son.vue";
export default {
  components: {
    Son
  },
  data () {
    return {
      father: {
        id: 1,
        name: '父亲:张三'
      },
    }
  },
  computed: {
  },
  watch: {},
  methods: {
    changeName (newName) {
      console.log("调用父组件方法fatherFn");
      this.father.name = newName
    }
  },
}
</script>
  • 子组件通过this.emit('父组件中绑定的事件名')调用
<template>
  <div>
      <h2>测试父组件向子组件传递方法,这是子组件</h2>
      <p @click="fatherFn">我调用父组件中方法:{{fatherName.name}}</p>
  </div>
</template>


<script>
export default {
  // 1. 父组件向子组件传值:子组件使用props属性接收
  props: ['fatherName'], // 父组件传来的,只读
  components: {
  },
  data() {
    return {
      newName:'李四'
    }
  },// 自带的,可读可写
  computed: {
  },
  watch: {},
  methods: {
    // 当点击子组件的时候,this.$emit()拿到父组件传过来的方法,并调用方法
    fatherFn(){
      console.log(this);
      // this.$emit('func','李四')
      this.$emit('func',this.newName)
    }
  },
}
</script>
  • 除去上述方法,还有一种方法,与“4”中法2相对应,就是通过$parent来调用。

4. 子组件向父组件传值

  • 在“3”中子组件通过this.$emit('func',this.newName)调用父组件方法时,实际就包含了“子组件向父组件传值”,这是一种方式
  • 还有一种方式就是给子组件通过ref来指定一个唯一标识,父组件通过$refs来调用,这种方式不仅能获取到子组件的数据和方法,还可以直接调用
// 父组件
<template>
  <div>
    <h1>测试父组件中调用子组件,这是父组件</h1>
    <!-- 3.引入子组件时指定ref -->
    <Son ref="son" />
    <button @click="onClick">调用子组件中值和方法</button>
  </div>
</template>

<script>
import Son from "./Son.vue";
export default {
  components: {
    Son
  },
  data () {
    return {
    }
  },
  computed: {
  },
  watch: {},
  methods: {
    onClick() {
      console.log(this.$refs['son'].s1);
      this.$refs['son'].fn()
    }
  },
}
</script>
<template>
  <div>
      <h2>测试父组件向子组件传递方法,这是子组件{{s1}} </h2>
  </div>
</template>


<script>
export default {
  components: {
  },
  data() {
    return {
      s1:"大儿"
    }
  },
  computed: {
  },
  watch: {},
  methods: {
    fn(){
      this.s1 = '小儿'
    }
  },
}
</script>

5. 子组件向父组件传方法

同“4”中方法2,通过$refs调用。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:07:25  更:2021-10-26 12:08:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 23:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码