vue2做一个类似表单列表的东西,可添加删除表单项,但是目前是直接操作props,能帮我不直接操作props吗
//外部表单
export default {
name: 'OutForm',
template: `
<el-form ref="outForm" class="outForm" :model="form" :inline="true" >
<el-form-item prop="name" label="表单名称" :rules="[{required:true}]">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="表单组">
<NestForm ref="nestForm" :group="form.activityGroup"></NestForm>
</el-form-item>
<el-form-item label="表单数据为">
{{form}}
</el-form-item>
<el-form-item>
<el-button @click="handleSubmit">提交表单</el-button>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: 'zs',
activityGroup: [
{
name: '活动一',
region: '区域一',
type: '类型一'
},
{
name: '活动二',
region: '区域二',
type: '类型二'
},
]
}
}
},
methods: {
handleSubmit() {
this.$refs.outForm.validate((valid) => {
if (valid) {
this.$message.success("提交成功")
} else {
this.$message.error("表单验证失败")
}
})
}
}
}
export default {
name: "NestForm",
template: `
<div>
<div v-for="(item,index) in group" :key="index" class="nestItem">
<el-form-item :prop="'activityGroup['+index+']'+'.name'" label="名称" :rules="[{required:true,message:'请输入名称'}]">
<el-input v-model="item.name"></el-input>
</el-form-item>
<el-form-item :prop="'activityGroup['+index+']'+'.region'" label="活动区域" :rules="[{required:true,message:'请输入活动区域'}]">
<el-input el-input v-model="item.region"></el-input>
</el-form-item>
<el-form-item :prop="'activityGroup['+index+']'+'.type'" label="活动形式" :rules="[{required:true,message:'请输入活动形式'}]">
<el-input v-model="item.type"></el-input>
</el-form-item>
<el-form-item>
<el-button type="danger" icon="el-icon-delete" circle @click="handleDelete(index)"/>
</el-form-item>
</div>
<el-button @click="handleAdd">添加活动</el-button>
</div>
`,
props: {
group: {
type: Array,
default() {
return []
}
}
},
methods: {
handleAdd() {
this.group.push({
name: '',
region: '',
type: ''
})
},
handleDelete(index) {
this.group.splice(index, 1)
}
}
}
感觉通过父组件的方法改外部值很麻烦呀,求大佬指教有啥巧妙方法
刚想回答发现AI回答的不错了,你可以参照下。就是用$emit来触发父组件事件。
不要在子组件里修改传入的props,违反了单向数据流的原则,出问题了也比较难排查。