快速了解Vue父子组件传值以及父调子方法、子调父方法

快速了解Vue父子组件传值以及父调子方法、子调父方法

在Vue中,组件通常会通过props属性传递数据,也可以使用$emit方法触发自定义事件来实现父调子方法和子调父方法。

父子组件传值

通过props属性传递数据

在父组件中使用props属性传递数据,子组件中使用props接收数据。比如:

<!-- 父组件 -->
<template>
  <div>
    <child-component :name="myName"></child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      myName: 'John'
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    My name is {{name}}
  </div>
</template>
<script>
export default {
  props: ['name']
}
</script>

这里,父组件中将myName数据通过props传递给子组件,在子组件中使用name来接收。

通过$emit方法触发事件传递数据

在子组件中使用$emit方法触发父组件中的自定义事件,将数据传递给父组件。比如:

<!-- 父组件 -->
<template>
  <div>
    <child-component @changeName="changeMyName"></child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      myName: 'John'
    }
  },
  methods: {
    changeMyName (newName) {
      this.myName = newName
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <input v-model="newName" @keyup.enter="changeName()">
    <button @click="changeName()">Change Name</button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      newName: ''
    }
  },
  methods: {
    changeName () {
      this.$emit('changeName', this.newName)
      this.newName = ''
    }
  }
}
</script>

这里,子组件中使用$emit方法触发父组件中的changeName事件,并将newName数据传递给父组件。

父调子方法

为了使用父组件调用子组件的方法,我们需要先获取子组件的实例,可以使用ref属性来获取子组件的实例。比如:

<!-- 父组件 -->
<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="callChildMethod()">Call Child Method</button>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  methods: {
    callChildMethod () {
      this.$refs.child.childMethod()
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    This is Child Component
  </div>
</template>
<script>
export default {
  methods: {
    childMethod () {
      alert('This is child method')
    }
  }
}
</script>

这里,父组件中使用ref属性获取了子组件实例,并在调用子组件的childMethod方法。

子调父方法

为了使用子组件调用父组件的方法,我们同样可以使用$emit方法触发自定义事件,从而被父组件所监听。比如:

<!-- 父组件 -->
<template>
  <div>
    <child-component @callParentMethod="parentMethod"></child-component>
    <div>{{message}}</div>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      message: ''
    }
  },
  methods: {
    parentMethod (msg) {
      this.message = 'This is returned message from child: ' + msg
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <button @click="callParentMethod()">Call Parent Method</button>
  </div>
</template>
<script>
export default {
  methods: {
    callParentMethod () {
      this.$emit('callParentMethod', 'Hello, parent')
    }
  }
}
</script>

这里,子组件中调用了父组件中的parentMethod方法,并将数据'Hello, parent'传递给父组件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速了解Vue父子组件传值以及父调子方法、子调父方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue中使用定时器(setInterval、setTimeout)的两种方式

    Vue是一款流行的JavaScript前端框架,开发者常常需要在Vue中使用定时器,来实现许多不同的功能,例如:轮播图、自动刷新等等。Vue中有两种主要的方式可以使用定时器:基础绑定方式和组件方法。 基础绑定方式 基础绑定方式是通过Vue自带的指令v-bind实现的,一般选择setTimeout的方式。语法如下: <template> <d…

    Vue 2023年5月29日
    00
  • 分享Vue组件传值的几种常用方式(二)

    请听我详细讲解“分享Vue组件传值的几种常用方式(二)”的完整攻略。 一、前言 在Vue组件传值的开发过程中,我们通常会遇到如下问题:如何在不同的组件之间传递数据?如何在父子组件之间通信?如何在没有父子关系的组件之间传递数据?这些问题都可以通过不同的方式来解决。在上一篇文章中,我们分享了“prop与$emit”这种传值方式。而今天,我们来分享“provide…

    Vue 2023年5月27日
    00
  • vue中如何给data里面的变量增加属性

    当需要在 Vue 实例的 data 对象中添加新属性时,可以通过以下两种方法来实现。 方法一:使用 Vue.set() 或 this.$set() 方法 Vue.set() 或 this.$set() 是 Vue 提供的全局方法,用于向响应式对象添加属性。如果需要以动态形式向 Vue 实例的 data 对象中添加属性,可以使用 Vue.set() 或 thi…

    Vue 2023年5月28日
    00
  • vue项目中定义全局变量、函数的几种方法

    在Vue项目中,有时候需要定义全局变量和函数以便在各个组件中使用,以下是几种定义全局变量、函数的方法: 1. 在main.js文件中定义全局变量和函数 在vue-cli创建的项目中,一般会默认生成一个main.js文件,可以在这个文件中定义全局变量和函数。 例如,我们要定义一个全局变量$api,可以在main.js中添加以下代码: import Vue fr…

    Vue 2023年5月27日
    00
  • Vue利用mockjs编写假数据并应用的问题记录

    我将为你详细讲解“Vue利用mockjs编写假数据并应用的问题记录”的完整攻略。 一、什么是Mock.js Mock.js是一款前端数据模拟生成工具,可以模拟各种数据类型的生成器,从最基本的文本、数字、布尔,到图片、颜色、地址等,还可以生成随机的JSON对象。 Mock.js利用简单的语法实现了数据自动生成,可根据自定义的规则生成符合条件的数据,模拟后端接口…

    Vue 2023年5月29日
    00
  • 深入理解vuex2.0 之 modules

    深入理解vuex2.0 之 modules 在使用 Vuex 状态管理模式时,在项目逐渐庞大、复杂时,我们不可避免需要将 state、mutation、action 拆分成单独的模块,方便单独管理、解耦以及后期维护。这就需要使用 Vuex 的 modules 来进行管理。 使用 modules 我们可以将一个 store 分成多个模块,每个模块都有自己的 s…

    Vue 2023年5月28日
    00
  • vue项目中$t()的意思是什么

    $t() 是 Vue 项目中用于实现多语言国际化的方法。它的作用是将被翻译的文本和当前语言转换成对应的文本。 1. 安装和配置 i18n 库 使用 $t() 的前提是,你需要在 Vue 项目中安装和配置好 i18n 库。下面是安装和配置 i18n 库的示例代码: import Vue from ‘vue’; import VueI18n from ‘vue-…

    Vue 2023年5月27日
    00
  • Vue基于NUXT的SSR详解

    Vue基于NUXT的SSR详解 什么是SSR SSR是指服务器端渲染(Server-side rendering),是将Vue组件在服务器端渲染成HTML字符串,然后再将这个HTML字符串返回给浏览器端,浏览器接收到这个HTML字符串后进行解析,即可渲染出页面来。 相对于SPA(单页应用程序)的客户端渲染(CSR),SSR更加利于SEO,加快页面的渲染速度,…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部