通过Vue.js

时间:2017-06-01 07:42:40

标签: javascript html vue.js

我正在使用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-keyp-value的位置。如何让变量从外部组件“传递”到内部组件?感谢。

1 个答案:

答案 0 :(得分:2)

好的,这个很棘手。

您的代码有几个问题: 您的组件应该只有一个根元素。因此,请将您的组件打包到<div>

然后,-不是放入javascript变量名称的有效字符。因此,您无法撰写(p-key, p-value) in parent,请撰写其他内容,例如(pKey, pValue) in parent

另一方面,html属性不区分大小写,因此您应该实际写密钥名(例如)而不是keyName,但仅限于属性名称。此限制仅适用于您的html文件(不在您的字符串模板中)。

最后,这是一个有效的js小提琴。

https://jsfiddle.net/6juwLd3b/

此外,我建议您在开发时查看控制台。显示的许多错误可能会导致您使用工作版本。

相关问题