在Vue上将对象作为prop传递

Die*_*gos 33 javascript vue.js

你如何继续将对象作为道具传递给vue?我认为这将是一项简单的任务,但显然不是.

我在.vue文件上有以下代码:

`

<template>
    <div id="scatter"></div>
</template>

<script>
    export default {
       props: {
           data: {
                type: Object,
           default: () => ({})
       }
     },
     mounted () { 
         console.log(this.data)
     }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

`

在html上我尝试传递data道具如下:

<component :data="{x:1}"></component>

当我尝试将其登录到控制台时,结果只是一个空的观察者对象.

Jam*_*now 21

我相信问题在你的代码中的其他地方,因为将对象作为prop传递就像你想象的那样简单:

// register the component
Vue.component('component', {
  props: {
    data: {
        type: Object
    }
  },
  template: '<div>Data: {{data}}</div>',
  mounted: function () {
    console.log(this.data)
  }
})

new Vue({
  el: '#example'
})
Run Code Online (Sandbox Code Playgroud)

HTML:

<div id="example">
  <component :data="{x:1}"></component>
</div>
Run Code Online (Sandbox Code Playgroud)

这是一个显示它在行动的小提琴:https: //jsfiddle.net/tk9omyae/

  • 有没有办法在组件中定义对象?所以父级会有类似的东西: myData = Object.create(component.dataModel); myData.x = 1; 然后在 HTML 中 :data="myData" ? (3认同)

exc*_*lsr 7

编辑:在我最初的回答并创建一个 JsFiddle 之后,我不确定为什么你描述的行为正在发生。当缩小到用例时,它可以工作:

<script>
    export default {
       props: {
           ok: {
               type: Object,
               default: () => ({}),
           },
           data: {
               type: Object,
               default: () => ({})
           }
       }
     },
     mounted () { 
         console.log(this.data) // {x:1}
         console.log(this.ok) // {x:1}
     }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

和 HTML:

<component :ok="{x:1}" :data="{x:1}"></component>
Run Code Online (Sandbox Code Playgroud)

这是一个演示行为的 JsFiddle:https ://jsfiddle.net/mqkpocjh/


kus*_*lvm 6

v-bind="yourObject"
Run Code Online (Sandbox Code Playgroud)

应该做 <my-component v-bind="yourObject"><my-component>

不确定<component></component>。仍在深入研究 Vue。尝试让我们知道。