如何将对象传递给生成宽度的Vue Web组件?

问题描述 投票:0回答:2

我的组件必须渲染一个对象来填充内容。当我在 Vue 项目中工作时,我可以毫无问题地传递这个对象

<my-compnent :card="card"></my-component>

但是当我尝试使用构建的组件时,它不会将“MyCard”读取为对象,而是读取为字符串......请提供一些帮助

我以与vue相同的方式尝试过,使用:card,但它不起作用,如果我只使用card =“card”,它可以访问组件但没有对象

我的代码:

<script>
 card =
     {
        name: 'card',
        graphic: 'https://static.anychart.com/images/gallery/v8/line-charts-line-chart.png',
        subtitle: 'about this card',
        info: 'this is a test content card',
        selector1: [
          { name: 'opt 1' },
          { name: 'opt 2' },
          { name: 'opt 3' }
        ],
        selector2: [
          { name: 'opt A' },
          { name: 'opt B' },
          { name: 'opt C' }
        ]
      }
</script>
<script src="https://unpkg.com/vue"></script>
<body>
   <my-component card="card"></card>
</body>

错误:

[Vue warn]:无效的道具:道具“card”的类型检查失败。期望的对象,得到值为“card”的字符串。

我也尝试过

<my-component :card="card"></card>

但这仅适用于 vue 项目,不适用于导出的 Web 组件。它给出了这个错误:

[Vue warn]:渲染错误:“TypeError:无法访问属性“名称”,_vm.card 未定义”

javascript vue.js vue-component web-component vue-directives
2个回答
2
投票

card="card"
会将字符串“card”作为值传递给
card
属性。如果你想将 JS 对象传递给 Vue 外部导出的 Web 组件,那么你必须在 JS 本身中完成。

<script>
 const card =
     {
        name: 'card',
        graphic: 'https://static.anychart.com/images/gallery/v8/line-charts-line-chart.png',
        subtitle: 'about this card',
        info: 'this is a test content card',
        selector1: [
          { name: 'opt 1' },
          { name: 'opt 2' },
          { name: 'opt 3' }
        ],
        selector2: [
          { name: 'opt A' },
          { name: 'opt B' },
          { name: 'opt C' }
        ]
      }
  let comp = document.querySelector('my-component')
  comp.card = card
</script>
<body>
   <my-component card="card"></card>
</body>

仅当您在 vue 项目中工作时,才可以使用

v-bind:card
或简单地使用 ':card',在这种情况下,您不需要使用导出的组件。但在这种情况下,对象
card
需要传递给 Vue 实例的
data
属性,否则 Vue 找不到它。这就是您收到错误的原因。

<script>
const app = new Vue({
  el: '#app',
  data: {
    card,
  },
}
</script>

0
投票
<my-element :user.prop="{ name: 'jack' }"></my-element>

<!-- shorthand equivalent -->
<my-element .user="{ name: 'jack' }"></my-element>
© www.soinside.com 2019 - 2024. All rights reserved.