Vue.js中使用道具将数据传递到的子组件

Vue.js中使用道具将数据传递到的子组件

在本文中,我们将研究如何在Vue.js中将数据从父组件传递到子组件。这篇文章适合所有阶段的开发人员,包括初学者。

在开始之前

我们可以在Vue.js中使用事件发射器修改组件数据的方法一文中查看使用事件发射器在vue.js中将数据及其状态从子组件传递到其父组件的方法。

在阅读本文之前,您应该已经了解了以下几点。

立即学习“前端免费学习笔记(深入)”;

您的电脑中将需要以下内容:

已安装Node.js版本10.x及更高版本。 您可以通过在终端/命令提示符下运行以下命令来验证是否已安装:

node -v

登录后复制

代码编辑器:建议使用Visual Studio Code

Vue的最新版本,已全局安装在您的计算机上

您的计算机上已安装Vue CLI 3.0。 为此,请先卸载旧的CLI版本:

npm uninstall -g vue-cli

登录后复制

然后安装一个新的:

npm install -g @vue/cli

登录后复制

在这里下载一个Vue入门项目

解压下载的项目

导航到解压缩的文件,并运行命令,以保持所有的依赖关系最新:

npm install

登录后复制

效率问题

如果你有一个数据对象(比如广告牌前十名艺术家列表),你想用两个不同的组件来显示,但是用的方式非常不同,那么你的第一反应就是创建这两个独立的组件,在数据对象中添加数组,然后在模板中显示它们。

这个解决方案非常好,但是当您添加更多组件时,它将成为一个非有效的解决方案。让我们用您在vs代码中打开的starter项目来演示这一点。

演示

打开测试。将vue文件复制到下面的代码块中:

  
    

Vue Top 20 Artists

    
          
  •       

    {{artist.name}}

          
  •     
  
export default { name: 'Test', data (){ return { artists: [ {name: 'Davido', genre: 'afrobeats', country: 'Nigeria'}, {name: 'Burna Boy', genre: 'afrobeats', country: 'Nigeria'}, {name: 'AKA', genre: 'hiphop', country: 'South-Africa'}, {name: 'Sarkodie', genre: 'hiphop', country: 'Ghana'}, {name: 'Stormzy', genre: 'hiphop', country: 'United Kingdom'}, {name: 'Lil Nas', genre: 'Country', country: 'United States'}, {name: 'Nasty C', genre: 'hiphop', country: 'South-Africa'}, {name: 'Shatta-walle', genre: 'Reagae', country: 'Ghana'}, {name: 'Khalid', genre: 'pop', country: 'United States'}, {name: 'ed-Sheeran', genre: 'pop', country: 'United Kingdom'} ] } }}

登录后复制

在“组件”文件夹中创建一个新文件,将其命名为test2.vue并将下面的代码块粘贴到其中:

  
    

Vue Top Artist Countries

    
          
  •       

    {{artist.name}} from {{artist.country}}

          
  •     
  
export default { name: 'Test2', data (){ return { artists: [ {name: 'Davido', genre: 'afrobeats', country: 'Nigeria'}, {name: 'Burna Boy', genre: 'afrobeats', country: 'Nigeria'}, {name: 'AKA', genre: 'hiphop', country: 'South-Africa'}, {name: 'Sarkodie', genre: 'hiphop', country: 'Ghana'}, {name: 'Stormzy', genre: 'hiphop', country: 'United Kingdom'}, {name: 'Lil Nas', genre: 'Country', country: 'United States'}, {name: 'Nasty C', genre: 'hiphop', country: 'South-Africa'}, {name: 'Shatta-walle', genre: 'Reagae', country: 'Ghana'}, {name: 'Khalid', genre: 'pop', country: 'United States'}, {name: 'ed-Sheeran', genre: 'pop', country: 'United Kingdom'} ] } }}li{ height: 40px; width: 100%; padding: 15px; border: 1px solid saddlebrown; display: flex; justify-content: center; align-items: center; } a { color: #42b983;}

登录后复制

要注册刚创建的新组件,请打开app.vue文件并在其中复制以下代码:

  
    Vue.js中使用道具将数据传递到的子组件          
import Test from './components/Test.vue'import Test2 from './components/Test2'export default { name: 'app', components: { Test, Test2 }}

登录后复制

使用VS代码终端中的此命令在开发环境中启动应用程序:

npm run serve

登录后复制

应该是这样的:

Vue.js中使用道具将数据传递到的子组件

您可以看到,如果您还有大约五个组件,则必须继续复制每个组件中的数据。想象一下,如果有一种方法可以定义父组件中的数据,然后将其带到每个需要它的子组件中,并使用属性名。

解决方案:Vue道具

Vue团队提供了他们所称的道具,这些道具是可以在任何组件上注册的自定义属性。它的工作方式是在父组件上定义数据并给它一个值,然后转到需要该数据的子组件并将该值传递给prop属性,以便该数据成为子组件中的属性。

语法如下:

Vue.component('blog-post', {  props: ['title'],  template: '

{{ title }}

'})

登录后复制

您可以使用根组件(app.vue)作为父组件并存储数据,然后注册道具从任何需要它的组件动态访问此数据。

在父组件中定义数据

选择根组件作为父组件后,必须首先定义要在根组件内动态共享的数据对象。如果您从一开始就关注这篇文章,请打开app.vue文件并在脚本部分中复制数据对象代码块:

import Test from './components/Test.vue'import Test2 from './components/Test2'export default {  name: 'app',  components: {    Test, Test2  },  data (){    return {      artists: [       {name: 'Davido', genre: 'afrobeats', country: 'Nigeria'},       {name: 'Burna Boy', genre: 'afrobeats', country: 'Nigeria'},       {name: 'AKA', genre: 'hiphop', country: 'South-Africa'},       {name: 'Sarkodie', genre: 'hiphop', country: 'Ghana'},       {name: 'Stormzy', genre: 'hiphop', country: 'United Kingdom'},       {name: 'Lil Nas', genre: 'Country', country: 'United States'},       {name: 'Nasty C', genre: 'hiphop', country: 'South-Africa'},       {name: 'Shatta-walle', genre: 'Reagae', country: 'Ghana'},       {name: 'Khalid', genre: 'pop', country: 'United States'},       {name: 'Ed Sheeran', genre: 'pop', country: 'United Kingdom'}      ]    }  }}

登录后复制

接收道具

定义数据之后,进入两个测试组件并删除其中的数据对象。要在组件中接收道具,必须指定要在该组件中接收的道具。进入两个测试组件,在脚本部分添加规范,如下所示:

export default {  name: 'Test',  props: ['artists']}

登录后复制

注册道具

要让vue引擎知道您有一些要动态传递给某些子组件的道具,必须在vue实例中指明它。这是在模板部分完成的,如下所示:

  
    Vue.js中使用道具将数据传递到的子组件          

登录后复制

在这里,我们使用v-bind指令来绑定artists(脚本部分中数据对象数组的名称)和artists(测试组件中的道具名称),这是您在上面部分中设置的名称。在这种情况下,在没有如下指令的情况下设置:

    

登录后复制

您将看不到任何输出,Vue编译器甚至ESLint也不会将其标记为错误或警告,因此,请务必注意并记住对每个动态绑定使用V-Bind。

使用道具

设置好道具之后,就可以在组件中使用它,就像数据是在同一组件中定义的一样。这意味着您可以设置方法调用并在我们的演示案例中轻松访问this.artists。

强类型道具

您还可以通过强输入道具来确保组件只接收您希望它接收的数据类型。例如,在我们的演示中,通过设置如下身份验证,您可以确保只有数组才能传递到组件:

export default {  name: 'Test',  props: {    artists: {      type: Array    }  }}

登录后复制

因此,每当您添加了一个错误的类型say string时,您将在控制台中收到一个警告,告诉您它得到的类型不是预期的类型。

2.png

您可以在这里获得本教程的完整代码。

结论

在这篇文章中,我们研究了vue道具,以及它们如何通过创建一个数据对象可重用性平台来帮助鼓励dry(不要重复自己的做法)。我们还学习了如何在Vue项目中设置道具。

相关推荐:2020年前端vue面试题大汇总(附答案)vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上就是Vue.js中使用道具将数据传递到的子组件的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3023260.html

(0)
上一篇 2025年3月13日 06:05:01
下一篇 2025年3月11日 22:22:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 深入了解Vue的中间件管道(middleware pipeline)

    通常,在构建SPA时,需要保护某些路由。例如假设有一个只允许经过身份验证的用户访问的 dashboard 路由,我们可以通过使用 auth 中间件来确保合法用户才能访问它。 在本教程中,我们将学到怎样用 Vue-Router 为Vue应用程…

    2025年3月13日
    200
  • 深入研究Vue CLI3

    Vue CLI是一个简单而强大的工具,用于搭建Vue.js项目。它可以确保各种构建工具与合理的默认设置一起顺利运行,因此您可以专注于编写应用程序,而不必花时间在配置上进行斗争。 Vue CLI 3是目前为止Vue生态系统中发生的最好事情,原…

    2025年3月13日
    200
  • Vuex中映射的完整指南

    Vuex 是一把双刃剑。如果使用得当,使用 Vue 可以使你的工作更加轻松。如果不小心,它也会使你的代码混乱不堪。 使用 Vuex 之前,你应该先了解四个主要概念:state、getter、mutation 和 action。一个简单的 V…

    2025年3月13日
    200
  • Vue.js 学习记录之一:学习规划和了解 Vue.js

    vue.js教程栏目介绍学习规划和了解 vue.js,可以一起来学习。 这篇学习笔记将记录一些我个人在学习 Vue.js 框架时所编写的程序代码与学习心得。为此,我会在ProgrammingLanguage/JavaScript目录下创建一…

    2025年3月13日
    200
  • Vue中值得关注的21个开源项目(推荐)

    Vue 相对不于 React 的一个优点是它易于理解和学习,且在国内占大多数。咱们可以在 Vue 的帮助下创建任何 Web 应用程序。 因此,时时了解一些新出现又好用的Vue 开源项目也是挺重要,一方面可以帮助咱们更加高效的开发,另一方面,…

    2025年3月13日 编程技术
    200
  • 深入理解vue响应式原理

    Vue最显著的特性之一便是不太引人注意的响应式系统(reactivity system)。模型层(model)只是普通JS对象,修改它则更新视图(view)。这会让状态管理变得非常简单且直观,不过理解它的工作原理以避免一些常见的问题也是很重…

    2025年3月13日
    200
  • Vue.js 学习之二:数据驱动开发

    vue.js教程栏目介绍vue.js学习之二的数据驱动开发 。 –>    登录后复制 在这里,我主要做了如下修改: 首先,在标签中增加了一个v-show指令,该指令可用于绑定一个布尔类型的数据(即这里的isShow),以…

    2025年3月13日
    200
  • Vue中怎么对事件进行防抖和节流操作?

    有些浏览器事件可以在短时间内快速触发多次,比如调整窗口大小或向下滚动页面。例如,监听页面窗口滚动事件,并且用户持续快速地向下滚动页面,那么滚动事件可能在 3 秒内触发数千次,这可能会导致一些严重的性能问题。 如果在面试中讨论构建应用程序,出…

    2025年3月13日
    200
  • 深入了解vue.js中的diff算法

    本篇文章给大家详细了解一下vue.js中的diff算法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 前言 我的目标是写一个非常详细的关于diff的干货,所以本文有点长。也会用到大量的图片以及代码举例,目的让看这篇文章的…

    2025年3月13日 编程技术
    200
  • 浅谈vue.js中的Props(单向数据流)

    prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。 另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组…

    2025年3月13日
    200

发表回复

登录后才能评论