我正在使用Vue.js编写一个页面,并尝试一些自定义组件。我从一个非常简单的开始:
Vue.component('single-field', {
template: '<b>{{ key }}:</b> {{ value }}',
props: ['key', 'value']
});
这本身可以正常工作:它旨在获取两个值并以键:值格式返回它们。最初,当我将值作为元素从Vue data
对象传递时(具体而言,pickup.dateTime
它不起作用。显示比解释更容易:
<div id="app">
<single-field key="Date & Time" value="pickup.dateTime"></single-field>
</div>
我能够通过绑定来解决这个问题(通过值注意冒号):
<single-field key="Date & Time" :value="pickup.dateTime"></single-field>
然后我写了第二个组件,它被设计为获取一个对象和一个标题,并将该对象的每个元素作为一组<single-field>
组件返回,并在其上方标题。这是我写的:
Vue.component('field-block', {
template: '<h2>{{title}}</h2>\
<div v-for="(p-key, p-value) in parent">\
<single-field key="p-key" value="p-value"></single-field>\
</div>',
props: ['parent', 'title']
});
现在,我认为我绑定(或不绑定?)的方式一定有问题,导致数据以奇怪的方式显示。这是我的HTML:
<div id="app">
<single-field key="DateTime" :value="pickup.dateTime"></single-field>
<single-field key="Name" :value="pickup.name"></single-field>
<field-block title="Address" :parent="pickup.address"></field-block>
</div>
字段pickup.address
是一个对象,所以我希望组件遍历元素并将它们作为单个字段返回,但它目前正在做的只是返回变量名称,如 p -key: p值。我尝试在组件定义中对它们进行绑定(两者都是因为它们现在都是传递的变量,而之前我使用的是key
字段的静态字符串):
<div v-for="(p-key, p-value) in parent">
<single-field :key="p-key" :value="p-value"></single-field>
</div>
但是返回的是 NaN: NaN,我无法弄清楚为什么会这样做。我不完全理解绑定操作,但我希望它在定义视图时仅绑定到data
选项中的数据,而不是定义p-key
和p-value
的位置。如何让变量从外部组件“传递”到内部组件?感谢。
答案 0 :(得分:2)
好的,这个很棘手。
您的代码有几个问题:
您的组件应该只有一个根元素。因此,请将您的组件打包到<div>
。
然后,-
不是放入javascript变量名称的有效字符。因此,您无法撰写(p-key, p-value) in parent
,请撰写其他内容,例如(pKey, pValue) in parent
。
另一方面,html属性不区分大小写,因此您应该实际写密钥名(例如)而不是keyName,但仅限于属性名称。此限制仅适用于您的html文件(不在您的字符串模板中)。
最后,这是一个有效的js小提琴。
https://jsfiddle.net/6juwLd3b/
此外,我建议您在开发时查看控制台。显示的许多错误可能会导致您使用工作版本。