广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >vue.js中怎么利用props传递参数
  • 234
分享到

vue.js中怎么利用props传递参数

2024-04-02 19:04:59 234人浏览 安东尼
摘要

vue.js中怎么利用props传递参数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 问题发现在父组件中,需要向表格组件传递的数据有

vue.js中怎么利用props传递参数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1. 问题发现

在父组件中,需要向表格组件传递的数据有表格的内容数据tableData,表格的页面数据page。

<div>
 <my-table :table-data="tableData" :page-info="pageInfo" id="myTable"></my-table>
</div>

其中tableData是个Array对象,是所有需要在表格中展示的数据对象组成的一个数组。而pageInfo是个Object对象,包含了表格页面信息。在父组件对两个数据对如下初始化,形式如下

tableData:[],
pageInfo: {
 current: 1, // 当前是第几页
 total: 100, // 数据对象的总数
 size: 20 // 每页显示的数量
}

按照官方文档上的说明,prop是单向绑定的,不应该在子组件内部改变prop。之所以有想修改prop中数据的冲动,主要是prop作为初始值传入后,子组件想把它当作局部数据来用。对于这种情况,官方的说法是定义一个局部变量,并用 prop 的值初始化它:

props: ['tableData', 'pageInfo'],
data() {
 return {
  tData: this.tableData,
  page: this.pageInfo
 }
}

然后根据官方文档的说法,当每次父组件更新时,子组件的所有prop都会更新为最新值。而tableData和pageInfo的信息是异步通过api从server端获取的:

{
 error: 0,
 msg: "调用成功.",
 data: {
  restrictioninfo: [...],
  total: 42
 }
}

因此当获取到数据时父组件需要改变传入子组件中的值:

me.tableData = JSON.data.restrictioninfo;
me.pageInfo.total = json.data.total;

按理说这时候子组件中的值应该更新成server返回的值,但是子组件页面的总数更新了,但table数据依然是初始化时的空数组。(黑人问号???)

vue.js中怎么利用props传递参数

2.赋值与绑定

首先需要定位数据是在哪个地方出了问题,于是我做了一个demo来定位问题。

首先看父组件与子组件中各元素的初始值:

vue.js中怎么利用props传递参数

然后当只改变父组件中数组的引用时可以看到子组件的props数组随之改变,而子组件中绑定的数组确并没有随之改变

vue.js中怎么利用props传递参数

因此,可以发现,问题是出在了这一步

props: ['tableData', 'pageInfo'],
data() {
 return {
  tData: this.tableData,
  page: this.pageInfo
 }
}

而要弄清楚问题的根源,就得弄清楚Vue文档中深入响应式原理。

vue.js中怎么利用props传递参数

"在Vue实例的data选项中,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为 getter/setter","每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。"文档中说了这么一大堆,简单理解就是Vue将data选项中的vm.$data.a与DOM中的vm.a进行了双向绑定,即其中一个变化,另一个也会跟着变化。在Vue源码中是由defineReactive$$1函数实现的:

vue.js中怎么利用props传递参数

但在子其中主要是利用了Object.defineProperty的get和set方法实现了双向绑定。而在子组件中,pros数据和子组件的$data是通过如下方式联系在一起的:

tData: this.tableData

查询Vue源码可知this.tableData与tData之间仅仅是赋值,即"="关系

vue.js中怎么利用props传递参数

而上述的initData函数是在组件构建时候执行的,因此只会在create时执行一次。这也是为什么官方文档中"作为初始值传入"这一说法,因为他本就只会执行一次。当组件构建完成后,this.tableData与tData就没有半毛钱关系了,其中一个的变化并不会引起另一个变化。当然,这种说法并不准确,因为在上文中,我们动态改变父组件传入的total,子组件也"随之"改变,感觉就像是绑定在一起了啊,这又是怎么回事呢?

3.引用类型带来的假象

当然,我们还是要从官方文档出发来解决这个问题。文档中有这样一个提示:

vue.js中怎么利用props传递参数

这里就需要理解引用类型的概念,引用数据类型值指保存在堆内存中的对象。也就是,变量中保存的实际上的只是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。访问方式是按引用访问。例如一个js对象a,他在内存中的存储形式如下图所示:

var a = new Object();

vue.js中怎么利用props传递参数

当操作时,需要先从栈中读取内存地址,然后再延指针找到保存在堆内存中的值再操作。

a.name = 'xz';

vue.js中怎么利用props传递参数
引用类型变量赋值,本质上赋值的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针指向存储在堆中的同一个对象;赋值操作结束后,两个变量实际上将引用同一个对象。因此,在使用时,改变其中的一个变量的值,将影响另一个变量。

var b = a;

vue.js中怎么利用props传递参数
在了解了引用类型之后,我们在来看看上文提到的动态改变传入子组件前后内存中的情况:

me.tableData = Json.data.restrictioninfo;
me.pageInfo.total = Json.data.total;
========================================
props: ['tableData', 'pageInfo'],
data() {
 return {
  tData: this.tableData,
  page: this.pageInfo
 }
}

首先对tableData的改变是改变了其引用的指针,而对pageInfo则改变了其中一个属性的值,因此动态改变前:

vue.js中怎么利用props传递参数

动态改变后:

vue.js中怎么利用props传递参数

关于vue.js中怎么利用props传递参数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网node.js频道了解更多相关知识。

--结束END--

本文标题: vue.js中怎么利用props传递参数

本文链接: https://www.lsjlt.com/news/72262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue.js中怎么利用props传递参数
    vue.js中怎么利用props传递参数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 问题发现在父组件中,需要向表格组件传递的数据有...
    99+
    2022-10-19
  • java参数怎么传递参数
    计算机语言给子程序传递参数的方法有两种:按值传递(call-by-value):这种方法将一个参数值复制成子程序的正式参数。这样,对子程序的参数的改变不影响调用它的参数。引用调用(call-by-reference):在这种方法中,参数的引...
    99+
    2020-12-17
    java入门 java 传递 参数
  • Vue中data传递函数、props接收函数及slot传参的使用及说明
    目录1. data作为转换层2. props接收传递过来的函数并把处理结果传回父组件3. 父组件接收子组件传递回来的值1. data作为转换层 1.1 如下图中的代码,data作为转...
    99+
    2022-11-13
    Vue中data传递函数 Vue中props接收函数 Vue中slot传参
  • Python中怎么传递函数参数
    今天就跟大家聊聊有关Python中怎么传递函数参数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数参数的使用又有俩个方面值得注意:>>> def&nbs...
    99+
    2023-06-17
  • ajax中怎么传递多个参数
    今天就跟大家聊聊有关ajax中怎么传递多个参数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体内容如下<html > <...
    99+
    2022-10-19
  • php怎么传递数组参数
    这篇文章主要讲解了“php怎么传递数组参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php怎么传递数组参数”吧!php可以传递数组参数。在PHP5.6及以后的版本中,函数的形式参数可使用...
    99+
    2023-06-30
  • Vue 中怎么将函数作为props传递给组件
    这篇文章将为大家详细讲解有关Vue 中怎么将函数作为props传递给组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。向组件传入函数获取一个函数或方法并将其...
    99+
    2022-10-19
  • Vue请求怎么传递参数
    本篇内容介绍了“Vue请求怎么传递参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、get请求get请求没有请求体,传递的参数是添加到u...
    99+
    2023-07-05
  • vue和js怎么传递参数
    Vue 和 JavaScript 是两个不同的技术,但它们经常一起使用。在 Vue 中,传递参数的方式与传递参数的方式在 JavaScript 中是相同的。本文将介绍 Vue 和 JavaScript 中传递参数的方法。Vue 中传递参数的...
    99+
    2023-05-24
  • python中关键字怎么传递参数
    python中关键字怎么传递参数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明关键词传递以“形参变量名=实参”的形式参与实参关联,根据形参的名称进行参数传递,使实参...
    99+
    2023-06-15
  • Java中怎么对参数进行传递
    本篇文章给大家分享的是有关Java中怎么对参数进行传递,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样...
    99+
    2023-05-31
    java ava
  • Python3中怎么向zip()函数传递参数
    这篇文章主要讲解了“Python3中怎么向zip()函数传递参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3中怎么向zip()函数传递参数”吧!基础知识首先,我们来介绍一些基...
    99+
    2023-07-05
  • 怎么使用mapper传递多个参数
    使用Mapper传递多个参数可以通过以下两种方式实现:1. 使用Map类型作为参数在Mapper接口方法中,使用Map类型作为参数,...
    99+
    2023-10-12
    mapper
  • shell怎么调用python并传递参数
    在shell中调用Python并传递参数,可以使用以下命令:```shellpython script.py arg1 arg2``...
    99+
    2023-09-16
    shell python
  • 使用python怎么在函数中传递实参
    这期内容当中小编将会给大家带来有关使用python怎么在函数中传递实参,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的...
    99+
    2023-06-14
  • Java中参数传递是怎样的
    这篇文章主要介绍“Java中参数传递是怎样的”,在日常操作中,相信很多人在Java中参数传递是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中参数传递是怎样的”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-22
  • 怎么在Shell脚本中通过参数名传递参数
    这期内容当中小编将会给大家带来有关怎么在Shell脚本中通过参数名传递参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。#!/bin/bashwhile getopts i:o:p:s...
    99+
    2023-06-09
  • vue在mounted拿不到props中传递的数据怎么解决
    这篇文章主要介绍“vue在mounted拿不到props中传递的数据怎么解决”,在日常操作中,相信很多人在vue在mounted拿不到props中传递的数据怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-05
  • Android 中怎么实现Activity 间传递参数
    这篇文章将为大家详细讲解有关Android 中怎么实现Activity 间传递参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.传递简单数据在A Activity中findViewByI...
    99+
    2023-05-30
    android activity
  • php怎么通过url传递参数
    在PHP中,可以通过URL传递参数使用GET方法或POST方法。1. 通过GET方法传递参数:通过在URL中附加参数来传递参数,参数...
    99+
    2023-08-17
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作