Vue.js에서 다단계 양식을 작성하는 방법.
읽기를 건너뛰거나 구성 요소를 직접 가져오려면 여기 링크가 있습니다.
https://github.com/yogeshgalav/vue-multi-step-form
https://www.npmjs.com/package/vue-multi-step-form
슬롯
간단한 언어로 된 슬롯은 사용될 상위 구성 요소에서 코드를 상속하거나 포함하는 데 사용됩니다.
따라서 필요에 따라 부모 구성 요소에서 직접 자식 구성 요소에 표시하거나 포함할 코드를 결정할 수 있습니다.
따라서 동적 HTML 또는 템플릿 또는 텍스트가 있는 동적 구성 요소가 있습니다.
우리는 주로 html이나 템플릿을 하위 구성 요소에 전달하려는 경우 슬롯을 사용합니다. props를 통해 전달한 다음 임베딩하는 것이 이상적인 일이 아니기 때문입니다.
여기에서 더 공부하고 싶다면 공식 문서에 대한 링크가 있습니다.
https://vuejs.org/guide/components/slots.html
특징
이제 다단계 양식으로 돌아가십시오.
구현하려는 몇 가지 기능은 다음과 같습니다.
건축물
양식이 html로 표시되는 방식은 다음과 같습니다.
<form>
<div id="step1">
<input type="text" name="phone_no">
</div>
<div id="step2">
<input type="text" name="otp">
</div>
<div id="step3">
<input type="text" name="first_name">
<input type="text" name="last_name">
</div>
</form>
그리고 여기 우리의 양식이 vue에서 어떻게 보이는지 보여줍니다.
로그인페이지.vue
<template>
<MultiStepForm>
<template slot="step1">
<input type="text" name="phone_no">
</template>
<template slot="step2">
<input type="text" name="otp">
</template>
<template slot="step3">
<input type="text" name="first_name">
<input type="text" name="last_name">
</template>
</MultiStepForm>
</template>
MultiStepForm.vue
<template>
<form>
<slot name="step1" />
<slot name="step2" />
<slot name="step3" />
</form>
</template>
구현
기능 1
구성 요소가 'N'개의 단계를 지원하려면 반복할 배열이 필요합니다. 이 배열은 소품을 통해 부모 구성 요소에서 전달할 것입니다.
MultiStepForm.vue
<template>
<form>
<div
v-for="(step, index) in steps"
:key="index" :id="'step'+(index+1)">
<slot
v-show="activeStepIndex===index"
:name="'step'+(index+1)" />
</div>
</form>
</template>
props:['steps'],
data(){
return {
activeStepIndex:0,
};
}
기능 2
양식의 다음 단계로 이동하려면 제출 버튼을 누를 때 'activeStepIndex'를 늘리면 됩니다.
MultiStepForm.vue
<form @submit.prevent="submitStep">
<div
v-for="(step, index) in steps"
:key="index" :id="'step'+(index+1)">
<slot
v-show="activeStepIndex===index"
:name="'step'+(index+1)" />
</div>
<button type="submit">Next</button>
</form>
methods:{
submitStep(){
this.activeStepIndex++;
}
}
기능 3
이제 모든 단계 또는 일부 숨겨진 입력 필드에 제목이나 디자인을 추가하거나 바닥글 또는 제출 버튼의 디자인을 수정하려는 경우 머리글 및 바닥글 슬롯을 통해 구현할 수 있습니다.
MultiStepForm.vue
<form @submit.prevent="submitStep">
<slot name="header" />
<div
v-for="(step, index) in steps"
:key="index" :id="'step'+(index+1)">
<slot
v-show="activeStepIndex===index"
:name="'step'+(index+1)" />
</div>
<slot name="footer">
<button type="submit">Next</button>
</slot>
</form>
이제 여기에서 바닥글 슬롯에 기본 html을 제공했습니다. 즉, 부모 구성 요소에서 바닥글 슬롯을 언급하지 않으면 기본적으로 제출 버튼을 사용할 수 있으며 그렇지 않으면 부모에서 구현해야 합니다.
로그인페이지.vue
<template>
<MultiStepForm :steps="steps">
<template slot="header">
<h1>Get Started -></h1>
</template>
<template slot="footer">
<button class="btn btn-primary"
type="submit">Get OTP</button>
</template>
//steps slots
</MultiStepForm>
</template>
기능 4
긴 형식이 있고 일부 로직을 기반으로 특정 단계를 동적으로 건너뛰고 싶다면 'steps' props 내부에 일부 데이터를 제공하여 이를 수행할 수 있습니다.
로그인페이지.vue
data(){
return {
steps:[
{'step_no':1,'step_valid':false,'step_skip':false},
{'step_no':2,'step_valid':false,'step_skip':true},
{'step_no':3,'step_valid':false,'step_skip':false},
],
};
}
또한 이제 단계를 건너뛰는 논리를 구현하는 데 필요한 데이터를 준비했습니다. 또한 마지막 단계인 경우 어떠한 조치도 취하지 않도록 주의해야 합니다.
MultiStepForm.vue
submitStep(){
if(this.activeStepIndex === this.steps.length){
//final step
this.$emit('onComplete');
return false;
}
this.activeStepIndex++;
while(this.steps[this.activeStepIndex].step_skip===true){
this.activeStepIndex++;
}
}
기능 5
다단계 양식에 필요한 대부분의 기능을 구현한 것 같습니다. 이제 현재 단계가 유효한지 확인하려는 다음 단계로 넘어가겠습니다. 유효하지 않은 경우 일부 양식 오류를 표시하고 사용자가 다음 단계로 이동하도록 제한합니다.
단계 개체 내에서 'step_valid'를 사용했음을 기억하고 사용하겠습니다.
MultiStepForm.vue
submitStep(){
if(!this.steps[this.activeStepIndex].step_valid){
this.$emit('valdiateStep', this.stepIndex);
return false;
}
//increase activeStepIndex
}
로그인페이지.vue
<template>
<MultiStepForm
ref="multiStepForm"
:steps="steps"
@onComplete="submitForm"
@validateStep="validateStep">
//slots
</MultiStepForm>
</template>
validateStep(stepIndex){
//run validation of step
//if step is valid then
this.steps[stepIndex].step_valid=true;
this.$refs.multiStepForm.submitStep();
//else show errors
}
submitForm(){
//api call to submit all data via post request
//redirect to somewhere
}
유효성 검사 라이브러리를 구현하는 동안 문제가 발생하는 경우 필요에 맞는 간단한 유효성 검사 패키지가 있습니다.
https://www.npmjs.com/package/vue-nice-validate
기능 6
이제 마지막 단계는 이전 방식을 통해 양식을 제출하는 것입니다.
액션 소품이 부모로부터 제공되는 경우 html 액션 및 메소드를 통해.
MultiStepForm 구성 요소는 다음과 같습니다.
MultiStepForm.vue
<form :id="id" :action="action" :method="method">
props:['steps','id','action','method']
submitStep(){
if(!this.steps[this.activeStepIndex].step_valid){
this.$emit('valdiateStep', this.stepIndex);
return false;
}
isLastStep = (this.activeStepIndex==this.steps.length);
if(isLastStep && this.action){
this.submitForm();
return true;
}
if(isLastStep){
this.$emit('onComplete');
return true;
}
this.activeStepIndex++;
while(this.steps[this.activeStepIndex].step_skip===true){
this.activeStepIndex++;
}
즐겁게 읽으셨기를 바랍니다.
제 Github 오픈 소스 리포지토리에 많은 사랑과 지원을 부탁드립니다.
어딘가에 갇혀 있거나 프로젝트를 아웃소싱해야 하는 경우 언제든지 저희를 고용하십시오.
감사합니다. 좋은 하루 보내세요!
Reference
이 문제에 관하여(Vue.js에서 다단계 양식을 작성하는 방법.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yogeshgalav7/how-to-build-multi-step-form-in-vuejs-4n5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)