【发布时间】:2017-04-08 23:40:26
【问题描述】:
我有很多表单要在我正在开发的 Web 应用程序中创建,为此我正在使用 Vue,因此我一直在尝试创建一个可以在整个过程中使用的通用输入组件。我正在使用 Bootstrap 网格,所以我的想法是我应该能够向组件传递一些要占用的列、一个标签、一个名称和一个用作 v-model 的属性。我想我已经到了那里,但是我遇到了变异道具的问题 - [Vue 警告]:避免直接变异道具,因为每当父组件重新渲染时,该值都会被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“模型” (在组件中找到)。 这是模板(简化形式):
<template id="field">
<div v-bind:class="colsClass">
<div class='form-group form-group-sm'>
<label v-bind:for="name">{{labelText}}</label>
<input v-bind:id='name' ref="input" class='form-control' v-bind:name='name' v-model='model'/>
</div>
</div>
这是(再次简化的)JS:
Vue.component('field', {
template: '#field',
props: ['cols','label','group','name','model'],
computed:{
colsClass:function(){
return "col-xs-"+this.cols
}
,
labelText:function(){
if(this.label) {
return this.label
} else {
return _.startCase(this.name);
}
}
}
});
这是在另一个“编辑产品”组件中使用的,如下所示:
<field :cols="8" name="name" :model="product.name"></field>
当我编辑字段的值时,这会显示 OK,但会引发错误(或更准确地说是警告)。那我做错了什么?
【问题讨论】:
标签: vue.js