Vuejs将道具从父组件传递到子组件不起作用

Posted

技术标签:

【中文标题】Vuejs将道具从父组件传递到子组件不起作用【英文标题】:Vuejs passing props to from parents component to child component not working 【发布时间】:2021-12-28 02:22:20 【问题描述】:

我是新手,负责一个使用 Vuejs 的项目。

这是一个使用名为 DashboardCard 的组件的页面,每个 DardboardCard 都传递了 2 个道具是 val 和来自页面的图标,也就是父组件

我在 DashboardCard 组件中声明了 props 也就是子组件,但是所有 props 的值都不能传递和分配

我现在遇到了这个错误

更新 这里是 Vuejs devtool 日志,可以看到 props 被传递了

【问题讨论】:

尝试像:icon="'@/assets/sale.png'":val="'$700'"一样传递它 你在 Vue 开发工具中看到 icon 属性了吗?还是您尝试将其注销? 你能用你的代码创建一个小提琴或沙箱吗? @Amaarrockz 没什么区别 @Amaarrockz 你可以试试这个codesandbox.io/s/trusting-meadow-5zuee?file=/src/components/… 【参考方案1】:

原因是,在道具持有价值之前,您就试图访问它。所以我建议有两种方法

来自父组件(Dashboard.vue):

尝试像 :icon="'@/assets/sale.png'":val="'$700'" 一样传递它

在子组件中(DashboardCard.vue

方法一:

声明两个数据变量并使用监视处理程序将它们设置为prop值

export default 
 components: DatePicker,
 props: 
   icon: 
     type: String,
     default: ''
   ,
   val: 
     type: String,
     default: ''
   
 ,
 data() 
  return 
    iconPath: '',
    amtVal: ''
  ;
 ,
 watch: 
  icon(newVal, oldVal) 
    this.iconPath = newVal;
  ,
  val(newVal, oldVal) 
    this.amtVal = newVal;
  
 

并在模板中使用您的本地数据变量,例如

<span>amtVal</span>

and

<img :src="require(iconPath)"  />

方法二:

使用计算属性

export default 
 components: DatePicker,
 props: 
   icon: 
     type: String,
     default: ''
   ,
   val: 
     type: String,
     default: ''
   
 ,
 computed: 
   getIcon() 
     return this.icon;
   ,
   getVal() 
    return this.val;
   
 

在模板中

<span>getVal</span>

and

<img :src="require(getIcon)"  />

【讨论】:

两种方法我都试过了,没有发生和一开始一样的错误,请你修改这个codeandboxcodesandbox.io/s/trusting-meadow-5zuee?file=/src/components/…【参考方案2】:

您在 DashboardCard 组件中缺少 script 结束标记 &lt;/script&gt;,因此 Vue 无法识别组件属性。起初,我认为在我尝试沙盒之前还有更多代码。

请注意,在 Vue devtools 扩展中,prop 应该位于 props 选项卡下,这不是您的情况。

我建议您使用某种 sn-ps 来避免这种烦人的拼写错误。对我来说,我使用Vetur。它还有助于语法高亮,非常方便的扩展。

https://marketplace.visualstudio.com/items?itemName=octref.vetur

【讨论】:

以上是关于Vuejs将道具从父组件传递到子组件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将状态作为道具传递给子组件不起作用

如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作

如何将道具从父组件添加到子组件的子组件

如何将道具从父组件渲染到子组件?

VueJS - 将插槽和作用域插槽向下传递给子模板中的组件

如何在 Vue JS 中将更新的值从父组件发送到子组件?