0

I am using vuejs,inertia and laravel framework. i am using registration form for enter user records. i fetch seller and state records on registration form load, and received them in props. when i used to submit button all the form fields save values through v-model, only form.seller and form.city are remain empty. please help me to find my mistake.

RegisrationForm.vue


    <template>
        <div>
            <div>
            <header-content> </header-content>
            </div>
            <div class="row">
            <div class="col-md-12">
                <!-- general form elements -->
                <div class="card card-primary">
                    <div class="card-header">
                        <h3 class="card-title">Create Registrations</h3>
                    </div>
                    <b-form>
                        <div class="card-body">
                            <base-input label="Name" v-model="form.name"/>
                            <base-input label="Email" v-model="form.email" />
                            <base-input type="password" label="Password" v-model="form.password" />
                            <base-input type="password" label="Confirm Password" v-model="form.confirmPwd" />
                            <base-input label="Contact No" v-model="form.contactno" />
    
                            <label for="Seller">Select Seller:</label>
                            <Select class="form-control" v-model="form.seller">
                                <option value="null"> Please Select Your Seller </option> 
                                <option v-for="type in this.$props.seller" :key="type.id" :value="type.id">{{ type.name }}</option>
                            </Select>
      
                            <label for="State">Select State:</label>
                             <select class="form-control"  v-model="form.state" v-on:change="getCities()">
                             <option :value="null"> Please Select State </option>
                             <option v-for="type in this.$props.states" :key="type.id" :value="type.id">{{ type.name }}</option>
                            </select>
    
                            <label for="State">Select City:</label>
                            <Select class="form-control" v-model="form.city">
                            <option :value="null"> Please Select City </option> 
                            <option v-for="type in this.cities" :key="type.id" :value="type.id">{{ type.name }}</option>
                            </Select>
                            <div class="w-100">
                            <button type="submit" size="lg" class="btn btn-primary" @click.prevent="SubmitRegistration">Submit</button>
                            </div>
                        </div>
                    </b-form>
                </div>
            </div>
    
        </div>
            <div>
                <footer-content> </footer-content>
            </div>
        </div>
    </template>
    
    <script>
    import BaseInput from './BaseInput';
    import SelectInput from '../../Shared/SelectInput';
    import axios from 'axios';
    import HeaderContent from '../Layouts/Header';
    import FooterContent from '../Layouts/Footer';
    import { required, minLength, between } from 'vuelidate/lib/validators'
    import VueIziToast from 'vue-izitoast';
    
    export default {
        components: {BaseInput,SelectInput,HeaderContent,FooterContent},
        props: ['states','seller'],
        data() {
            return{
                cities:[],
                form:{
                    name: '',
                    email: '',
                    password:'',
                    confirmPwd:'',
                    contactno: '',
                    state: '',
                    city: '',
                    seller: '',
                },
            }
        },
        validations: {
            form:{
                name:{
                    required
                },
                email:{
                    required
                },
                contactno:{
                    required
                },
                seller:{
                    required
                }
            }
        },
            
            methods:{
                     getCities(){
                           axios.get('/city-dropDownList/'+this.form.state)
                             .then(({ data })=> {
                              this.cities = data.cities;
                             })
                    },
                    SubmitRegistration(){
                        axios.post('submitRegistrationForm',this.form)
                        .catch(({ response }) => {
                            this.$toast.error(response.data.message, 'error', {timeout:3000});
                        }).then(({ data }) => {
                            this.$toast.success(data.message, 'success', {timeout:3000});
                        });
                    },
            } 
    }
    </script>

  • check your vue dev tool value is reactive or not – Kamlesh Paul Nov 10 '20 at 07:03
  • Could you actually be able to see states options and also seller options in your select? What's happening when you change? (check on your dev tool). Also since you are accepting those `seller` and `states` as props you don't need to write as `this.$props.states` you can simply use `this.states` – halilcakar Nov 10 '20 at 07:05
  • Yes states and seller options are selected, in dev tool seller id and city id is showing its selected id. –  Nov 10 '20 at 07:09
  • provide a working js fiddle or codepen example for quick debugging – Mr Khan Nov 10 '20 at 08:02

0 Answers0