When using selectboxes in Vue.js you often need to pre-select an option when presenting an edit form for example.

<label><h5 class="mt-3 ml-2">Category</h5></label>
<select class="form-control mt-1" v-model="selected" 
     @change=checkCategory>
    <option v-for="(category, index) in categories"
                :value="category.id"
                :selected="category.id === current_category.id">
                {{category.category_name}}
    </option>
</select>

The script then sets the original value on the mounted life-cycle hook.

<script>
    export default {
        name: "CategorySelect",
        props: ['categories', 'tool', 'current_category'],
        data() {
            return {
                show_expiry: false,
                selected: this.current_category.id,
                expiry_date: this.tool.expiry_date,
                category_id: this.tool.category_id,
                tool_name: this.tool.tool_name,
                tool_description: this.tool.tool_description,
                tool_serial: this.tool.tool_serial,
                tool_id: this.tool.id

            }
        },
        mounted() {
            this.selected === this.current_category.id;
            if(this.current_category.needs_calibration)
            {
                if(this.expiry_date != null)
                {
                    this.expiry_date = this.expiry_date.substring(0,10);
                }
                this.show_expiry = true;
            }
        },
        methods: {
            checkCategory()
            {
                axios.get('/tool_categories/check/'+this.selected)
                    .then((response) => {
                        // handle success
                        this.expires = response.data.needs_calibration;
                        if(this.expires)
                        {
                            this.show_expiry = true;
                        } else {
                            this.show_expiry = false;
                        }
                    })
                    .catch(e => {
                        this.errors.push(e);
                    });
            },
            submitTool()
            {
                console.log("OK");
                this.errors = [];
                axios.patch('/tools/'+this.tool_id, {
                    tool_name: this.tool_name,
                    tool_description: this.tool_description,
                    category_id: this.selected,
                    expiry_date: this.expiry_date,
                    tool_serial: this.tool_serial
                })
                .then((response)  => {
                    return window.location.href = '/tools';
                })
                .catch(e => {
                    if(e){
                        console.log("Errors: "+ e)
                    }

                });
            }
        },
    }
</script>

<style scoped>

</style>
Last modified: 02/11/2020

Comments

Write a Reply or Comment

Your email address will not be published.