【发布时间】:2018-11-24 05:03:42
【问题描述】:
我是 Vue 的新手,在查看文档后,我不知道如何实现以下目标:
- 将任意命名的变量作为道具传递给组件实例。
据我了解,props 是一种允许将数据传递给组件的方式,正如它在网站上所说的那样:
使用 Props 将数据传递给子组件: 道具是您可以在组件上注册的自定义属性。当一个值被传递给一个 prop 属性时,它就成为该组件实例上的一个属性。
由于 props 可以是 required,似乎我们可以在假设某些数据存在并且可能在某些参数内(如果指定了验证器选项)的情况下设计组件。
所以我想在 vue outside 定义一个函数或对象,例如在应用程序中,并将此函数或对象传递给我的 vue 实例。
如果我的命名函数对象与我尝试绑定它的道具具有完全相同的名称,则此方法有效。但是,由于我可能有多个 Vue 组件实例并且我可能想要绑定不同的数据,我发现为变量使用相同的名称不太理想。
现在,如果我按照 Vue 警告的建议进行操作,并将对象 / 函数命名为与 prop 相同的名称,那么警告会切换到我的数据未在 vue 中定义,并通过阅读确保它是反应性的:https://vuejs.org/v2/guide/components-props.html
说实话,这并没有真正解释如何解决问题,
或将道具移动到数据级别。
我可以做到(仍然给出相同的警告),但是根据我对 Vue 的理解,有点违背了拥有道具的目的。
这对于匿名 vue 实例变得更加令人沮丧。
例如
<script>
export default {
props: {
// records: {
// default: function(){return{}},
// type: Object
// }
},
data: function() {
return {
records: {} // define even an empty value in data for it to be 'reactive'
}
},
computed: {
fields: function() {
},
keys: function() {
return Object.keys(this.records)
}
},
methods: {
}
}
</script>
尝试将其用作组件并将记录设置为var myRecords = {"a": {}} 失败:
<my-comp :records="myRecords"/>
那么我应该如何确切地规避这个?那我应该在哪里定义我的数据呢?多实例的情况下如何命名?
在类似问题上可以找到更成熟的示例:
Vue2: passing function as prop triggers warning that prop is already set
【问题讨论】:
-
你现在在哪里定义你的数据?
-
@ippi 目前我只是在 vue 实例之前的 html 正文中的脚本标记中定义它。但是,可以想象它会以 XMLHttpRequest 或类似的响应的形式出现
-
那么,因为例如
<component :data="{x:1}"></component>确实可以工作,而且这看起来像一个组件,我假设您需要将数据传递给父级(也可以有道具)和然后再次将其传递给 props 中的组件。 -
@ippi,我不确定我是否跟随。几天前我开始使用 Vue。这个组件,是根
标签: javascript vue.js vuejs2