我有很多窗体可以在我正在使用的Web应用程序中创建,为此我使用Vue,所以我一直试图创建一个可以使用的通用输入组件始终。我使用的是Bootstrap网格,所以我的想法是,我应该能够传递组件的许多列来占用,标签,名称和属性用作v模型。我觉得,我有点不习惯,但是我遇到了一个突变道具的问题 - [Vue warn]:避免直接改变道具,因为只要父组件重新渲染,值就会被覆盖。相反,使用基于道具值的数据或计算属性。支柱正在发生变异:“型号” (在组件中找到)。 这里是模板(以简化形式):试图创建通用输入组件
<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>
这显示确定,但抛出错误(或更多精确度伊利,警告),当我编辑字段的值。那么我做错了什么?