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

Posted

技术标签:

【中文标题】如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作【英文标题】:Cannot manipulate with data property as an object if it is passed from parent to child component in VueJs 【发布时间】:2020-02-22 11:25:09 【问题描述】:

我试图访问从父组件传递到子组件的对象数据属性,但 vue 抛出一个无法访问它们的异常。 这是我的父组件

<app-full-name v-model="fullname"></app-full-name>
<script>
export default 
        components:
            appFullName: FullName
        ,
        data() 
            return 
                fullname: 
                  f:'Bassem',
                  l: 'Samir'
                ,

            
        
    
</script>

在子组件中

<script>
export default 
    props:['value'],
    methods: 
        changeName(isFirst, event)
            let name = "";
            if(isFirst)
                name = this.value.f+" ";
            
            else
                name = this.value.l+" "+this.value.l;
            
        ,  
    ,

</script>

Vuejs 抛出 f 属性在子组件中未定义的错误。 我该如何解决这个问题?

【问题讨论】:

什么是value?你的app-full-name 组件是什么样子的? 当你得到一个 props 值,并传递一个模型,数据应该到达 value 属性,我建议你更好地组织这个 props 语句。例如:props: value: type: Object, default: () => 如果这不起作用,我会更改属性名称,并尝试通过基于直接道具传递信息来提供信息。例如:child: props: myValue: type: Object, default: () => ,父亲: 【参考方案1】:

您得到一个undefined,因为您正在访问一个未定义的道具“值”。如果你想在 parent->child 之间共享数据,你应该使用:

//Parent file
<app-full-name your-data="fullname"></app-full-name>

//Child file (app-full-name)
...
props:['yourData']

这样,您将“您的数据”作为道具发送给您的孩子。请记住,您无法在子级中更改此值,如果需要更新它,则应通过事件(发射)进行。

孩子发送一个事件(发出它),而父母正在监听数据中的属性变化。比如:

//child
this.$emit('changeData')

//parent
@changeData="changeData"
function changeData() //the changes here 

您可以阅读更多相关信息,here

希望对你有帮助!

【讨论】:

以上是关于如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作的主要内容,如果未能解决你的问题,请参考以下文章

Angular中从父组件到子组件的数据共享

如何在角度2中将数据从父构造函数传递到子组件

数据未在 VueJS 中使用提供/注入从父级注入到子级

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

Angular 2 单元测试数据从父组件传递到子组件

在 AngularJS 组件中从父级到子级通信事件