vue+ts+element-ui 동적 생성 동적 폼
24680 단어 vue
1. 설명
본문은 vue-cli에 기초를 두고 있다.xtsvue 항목에 쓰인 2.x의 친구는 좀 더 고쳐야 할 수도 있습니다. 현재는 간단한 표일 뿐이고 후기에는 후속 업데이트가 있을 수도 있습니다.
2. 주요render 함수의 쓰기
이것은 주요render 함수입니다
import input from './Input';
import select from './Select';
import radio from './Radio';
import checkbox from './CheckBox'
import textarea from './Textarea'
import textdesc from './TextDesc'
import { Vue, Component, Prop } from 'vue-property-decorator';
const form_item :any = {
input,
select,
radio,
checkbox,
textarea,
textdesc
};
@Component
export default class extends Vue {
@Prop() obj !:any
@Prop() value !: any
@Prop() sure !:boolean
@Prop() ele !: string
@Prop() rinx !:number
render(h :any) :any {
let form_prop = {
props: {
prop: this.obj.name,
label: this.ele == 'textdesc' ? "" : `${this.rinx + 1}、${this.obj.label}:`,
rules: this.obj.required ? [{ required: true, message: ' ', trigger: 'blur' }] : []
}
}
return h('el-form-item',
form_prop,
[h('pre', {}, this.obj.desc),form_item[this.ele](this, h)]);
// []
// form_item[this.ele](this, h)
}
}
render 함수의 해석
h('el-form-item',
{
props: {
prop: this.obj.name,
label: this.ele == 'textdesc' ? "" : `${this.rinx + 1}、${this.obj.label}:`,
rules: this.obj.required ? [{ required: true, message: ' ', trigger: 'blur' }] : []
}
},
[h('pre', {}, this.obj.desc),form_item[this.ele](this, h)]);
el-form-item은 el-form-item을 쓰는 html 노드를 가리킨다.
<el-form-item>el-form-item>
props는 귀속이 필요한 props를 가리킨다
<el-form-item :prop='obj.name' :label='obj.label'>el-form-item>
마지막 항목은 바로 그 내용입니다.
<el-form-item :prop='obj.name' :label='obj.label'>
<pre>{{ obj.desc }}pre>
el-form-item>
3. 데이터 구조
여기는 나 자신의 정의이지 규정된 문법이 아니다.
let qestion :any = {
// type item input select
ele: type,
obj: {
label: ' ',
// item
name: type + this.list.length,
desc:'',
//
required: type == 'textdesc' ? false : true
}
}
4. 폼 컨트롤의 쓰기
El-input을 예로 들면
export default (_self :any, h :any) => {
return [
h("el-input", {
props: {
value: _self.value, // value
},
'class': {
inp: true // class
},
on: {
"input": function (val :any) {
if (!_self.obj.name) {
return false;
}
// , event null
let current: any = event && event.currentTarget ? event.currentTarget : ''
_self.$emit('handleChangeVal', current.value, _self.obj.name)
}
}
})
];
};
el-select를 예로 들다
export default (_self: any, h: any) => {
return [
h("el-select", {
props: {
placeholder: _self.obj.placeholder || " ",
value: _self.value
},
on: {
"change": function (val: any) {
if (!_self.obj.name) {
return false;
}
_self.$emit('handleChangeVal', val, _self.obj.name)
}
}
},
_self.obj.items.map((v:any) => {
return h("el-option", {
props: {
label: v.label,
value: v.label,
disabled: v.diss,
},
})
}))
];
};
강조:el-radio와el-checkbox, 값 변경은change가 아닌 input
5. 부급에서 작성한 데이터를 얻는다
// emit
handleChangeVal(val :any,ele_name :any){
this.$set(['object '], ele_name, val);
}
6、demo
시간 나면 다시 업데이트할게요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.