【问题标题】:How to pass a javascript object to component in VueJS?如何将 javascript 对象传递给 VueJS 中的组件?
【发布时间】:2017-10-31 05:22:07
【问题描述】:

这个问题可能听起来很基础,但我无法弄清楚如何在 VueJS 中做到这一点

我在html中有以下内容

<script>
 var config = {'cols':4,'color':'red'}
</script>

<div id="app">
   <mycomponent :config="config"></mycomponent>
</div>

var app = new Vue({
   el: '#app',
   data: {
      // config: config // I do not want to pass this
   }
})

以下是用例:

  • 我知道这不起作用,因为组件中的配置变量正在寻找 app.config
  • 我不想在 Vue 对象中将其作为 data{ config:config } 传递。
  • 我可以将其传递为 &lt;mycomponent :config="{'cols':4,'color':'red'}"&gt;&lt;/mycomponent&gt;,但配置会很长,这将是我最后的选择。
  • 是的,一旦页面加载,这个配置就不会改变,所以我不需要绑定值。

有没有办法做到这一点?

【问题讨论】:

  • ++,我定义了一些全局的my_componentname_config() 函数,然后在“created”钩子中调用它。但它不是一个很好的解决方案......
  • 作为对象字符串传递给组件会更好,而且约束是我在我的应用程序的多个地方使用这个组件,我所做的就是更改配置。配置在后端生成并与 HTML 一起传递。
  • 按照此处所述制作插件:底部的stackoverflow.com/a/43193455/7636961

标签: javascript vue.js vue-component


【解决方案1】:

您可以将全局成员添加到 Vue 本身。 更新: 正如 Osuwariboy 在 cmets 中指出的那样,出于某种原因,Vue 在未缩小版本的 Vue 中不知道自己的名称。它需要创建一个 Vue 数据项,我在下面完成了。

var app = new Vue({
   el: '#app',
   data: {
      Vue
   },
   components: {
      myComponent: {
        template: '<div>{{config}}</div>',
        props: ['config']
      }
   }
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.min.js"></script>
<script>
 Vue.$config = {'cols':4,'color':'red'}
</script>

<div id="app">
   <my-component :config="Vue.$config"></my-component>
</div>

【讨论】:

  • 这对我很有效!您能帮我理解为什么在应用程序内部无法访问外部定义的 javascript 对象吗?
  • 如果它是一个全局变量,它是可以访问的,但是用var声明,它不是全局的。我建议将其附加到 Vue 全局而不是广泛开放的全局。
  • @RoyJ 无论我多么努力,我都无法让您的解决方案发挥作用。你能看看我的小提琴here 并告诉我我做错了什么吗?
  • @Osuwariboy 如果你使用Vue的cloudflare cdn就可以了。您可以在 cloudflare 上使用 2.3.4 版本,它可以工作; unpkg.com cdn 也应该是 2.3.4,但它不起作用。我无法解释。
  • @Osuwariboy 你可以为 Vue 添加一个data,使用全局 Vue 定义它,你的就可以了。 jsfiddle.net/8xt8ye4g/5
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 2019-07-11
  • 1970-01-01
  • 2019-12-30
  • 2017-07-21
  • 1970-01-01
  • 2018-09-05
  • 2021-03-15
相关资源
最近更新 更多