SoFunction
Updated on 2025-04-10

How does the child component of vue modify the value of the parent component?

How to modify the value of a parent component in a child component

first step

First, you have to ensure that there is value in the parent component

This is

data(){
    return{
        dialogCreate:'false'
    }
}

Step 2

Reference child components in parent component

import Form from './userCreate'

Step 3

Register child components in parent components and reference

<template>
    <app-form></app-form>
</template>
<script>
    export default{
        name:'user',
        components:{
            "app-form":Form
        },
        data(){
            return{
                dialogCreate:'false'
            }
        }
    }
</script>

Step 4

Bind the parent component's value to the child component

<app-form v-bind:dialogCreate = "dialogCreate" ></app-form>

Step 5

Since the parent component gives the value to the child component, the child component must accept and use it.

Subcomponents

1.Accept first
export default{
    props:['dialogCreate']
}
2.You can use it directly in the subcomponent
&lt;p&gt;{{dialogCreate}}&lt;/p&gt;

Step 6

Send a method to the parent component

For example, when we successfully receive data in the background, we tell the parent component that it has been successful.

this.$emit('success',false);

Step 7

The parent component receives this method and performs changing the value of the parent component

<app-form v-bind:dialogCreate = "dialogCreate" v-on:success="success(res)"></app-form>
methods: {
     check(){
         alert(1);
     },
     success(res){
         = res;
     }
}

Finally, post the source code

Parent component

&lt;template&gt;
    &lt;div class="table"&gt;
        &lt;div class="crumbs"&gt;
            &lt;el-breadcrumb separator="/"&gt;
                &lt;el-breadcrumb-item&gt;&lt;i class="el-icon-menu"&gt;&lt;/i&gt; sheet&lt;/el-breadcrumb-item&gt;
                &lt;el-breadcrumb-item&gt;基础sheet&lt;/el-breadcrumb-item&gt;
            &lt;/el-breadcrumb&gt;
        &lt;/div&gt;
        &lt;div class="handle-box"&gt;
            &lt;el-row :gutter="22"&gt;
                &lt;el-col :span="6"&gt;
                    &lt;label&gt;Login name:&lt;/label&gt;
                    &lt;el-input v-model="userName" placeholder="Login name" class="handle-input mr10"&gt;&lt;/el-input&gt;
                &lt;/el-col&gt;
                &lt;el-col :span="6"&gt;
                    &lt;label&gt;Name:&lt;/label&gt;
                    &lt;el-input v-model="realName" placeholder="Name" class="handle-input mr10"&gt;&lt;/el-input&gt;
                &lt;/el-col&gt;
                &lt;el-col :span="10"&gt;
                    &lt;label&gt;Operation time:&lt;/label&gt;
                    &lt;!-- &lt;div class="block"&gt; --&gt;
                        &lt;el-date-picker
                            v-model="value1"
                            type="datetimerange"
                            range-separator="to"
                            start-placeholder="start date"
                            end-placeholder="End Date"&gt;
                        &lt;/el-date-picker&gt;
                    &lt;!-- &lt;/div&gt; --&gt;
                &lt;/el-col&gt;
            &lt;/el-row&gt;
           &lt;el-row :gutter="20" style="margin-top:10px"&gt;
                &lt;el-col :span="6"&gt;
                    &lt;label&gt;state:&lt;/label&gt;
                    &lt;el-select v-model="isClose" placeholder="Match Status" class="handle-select mr10"&gt;
                        &lt;el-option key="" label="Please select" value=""&gt;&lt;/el-option&gt;
                        &lt;el-option key="1" label="efficient" value="0"&gt;&lt;/el-option&gt;
                        &lt;el-option key="2" label="invalid" value="1"&gt;&lt;/el-option&gt;
                    &lt;/el-select&gt;
                &lt;/el-col&gt;
                &lt;el-button type="primary" icon="search" @click="search"&gt;search&lt;/el-button&gt;
                &lt;el-button type="success" icon="plus" @click="handleCreate"&gt;create&lt;/el-button&gt;
           &lt;/el-row&gt;
        &lt;/div&gt;
        &lt;el-table :data="data" border style="width: 100%" ref="multipleTable" @selection-change="handleSelectionChange"&gt;
            &lt;!-- &lt;el-table-column prop="date" label="Serial Number" sortable&gt;
            &lt;/el-table-column&gt; --&gt;
            &lt;el-table-column label="Serial Number"
              type="index"
              :index="indexMethod" width="60px"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="userName" label="Login name" &gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="realName" label="Name" &gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="isClose" label="state" :formatter="states"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="roleName" label="Role Name" width="120px"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="sex" label="gender" :formatter="sex"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="mobile" label="Mobile phone" width="120px"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="email" label="Email" width="120px"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column prop="ts" label="Operation time" width="120px"&gt;
            &lt;/el-table-column&gt;
            &lt;el-table-column label="operate" width="180"&gt;
                &lt;template scope="scope"&gt;
                   &lt;!--  &lt;el-button size="small"
                            @click="handleEdit(scope.$index, )"&gt;edit&lt;/el-button&gt;
                    &lt;el-button size="small" type="danger"
                            @click="handleDelete(scope.$index, )"&gt;delete&lt;/el-button&gt; --&gt;
                    &lt;el-dropdown trigger="click"&gt;
                      &lt;span class="el-dropdown-link"&gt;
                        operate&lt;i class="el-icon-caret-bottom el-icon--right"&gt;&lt;/i&gt;
                      &lt;/span&gt;
                      &lt;el-dropdown-menu slot="dropdown"&gt;
                        &lt;el-button type="text" class="dropbtn"  @click="handleEdit(scope.$index, )"&gt;
                          Check
                        &lt;/el-button&gt;
                        &lt;el-button type="text" class="dropbtn"&gt;
                          edit
                        &lt;/el-button&gt;
                        &lt;el-button type="text" class="dropbtn"&gt;
                          delete
                        &lt;/el-button&gt;
                        &lt;el-button type="text" class="dropbtn"&gt;
                          invalid
                        &lt;/el-button&gt;
                        &lt;el-button type="text" class="dropbtn"&gt;
                          Reset password
                        &lt;/el-button&gt;
                        &lt;el-button type="text" class="dropbtn"&gt;
                          Assign roles
                        &lt;/el-button&gt;
                      &lt;/el-dropdown-menu&gt;
                    &lt;/el-dropdown&gt;
                &lt;/template&gt;
            &lt;/el-table-column&gt;
        &lt;/el-table&gt;
        &lt;div class="pagination"&gt;
            &lt;el-pagination
                    @size-change="handleSizeChange"
                    @current-change ="handleCurrentChange"
                    :current-page="cur_page"
                    :page-size="pageSize"
                    :page-sizes="[5, 10, 15, 30]"
                    layout="total,sizes,prev, pager, next,jumper"
                    :total="total"&gt;
            &lt;/el-pagination&gt;
        &lt;/div&gt;
        &lt;!-- Check弹出框 --&gt;
        &lt;el-dialog
            title="Check"
            :="dialogVisible"
            width="10%"
            :before-close="handleClose"&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;&amp;ensp;&amp;ensp;Login name:&lt;/span&gt;
                &lt;label &gt;{{signName}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;Name:&lt;/span&gt;
                &lt;label &gt;{{name}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;gender:&lt;/span&gt;
                &lt;label &gt;{{sexUser}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;Mobile phone:&lt;/span&gt;
                &lt;label &gt;{{mobile}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;Email:&lt;/span&gt;
                &lt;label &gt;{{email}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;state:&lt;/span&gt;
                &lt;label class="green" &gt;{{isClose}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class="form-inline"&gt;
                &lt;span&gt;&amp;ensp;&amp;ensp;Terminal number:&lt;/span&gt;
                &lt;label class="" &gt;{{remark}}&lt;/label&gt;
            &lt;/div&gt;
            &lt;span slot="footer" class="dialog-footer"&gt;
                &lt;el-button @click="dialogVisible = false"&gt;Pick remove&lt;/el-button&gt;
                &lt;el-button type="primary" @click="dialogVisible = false"&gt;Confirm Certainly&lt;/el-button&gt;
            &lt;/span&gt;
        &lt;/el-dialog&gt;
        &lt;!-- create弹出框 --&gt;
        &lt;el-dialog
            title="hint"
            :="dialogCreate"
            width="30%"
            :before-close="handleClose"&gt;
                &lt;app-form v-bind:dialogCreate = "dialogCreate" v-on:success="success(res)"&gt;&lt;/app-form&gt;
        &lt;/el-dialog&gt;
    &lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
import Form from './userCreate'
    export default {
        name:'user',
        components:{
            "app-form":Form
        },
        data() {
            return {
                url: './static/',
                userName:'',
                realName:'',
                reservation:'',
                isClose:'',
                tableData: [],
                dataObj:{},
                cur_page: 1,
                multipleSelection: [],
                select_cate: '',
                select_word: '',
                del_list: [],
                is_search: false,
                value1: ['',''],
                total:100,
                pageSize:10,
                dialogVisible:false,
                dialogCreate:false,
                signName:'123',
                name:'123',
                sexUser:'',
                mobile:'',
                email:'',
                isClose:'',
                remark:''
            }
        },
        created(){
            ();
        },
        computed: {
            data(){
                const self = this;
                return (function(d){
                    let is_del = false;
                    for (let i = 0; i &lt; self.del_list.length; i++) {
                        if( === self.del_list[i].name){
                            is_del = true;
                            break;
                        }
                    }
                    return d;
                })
            }
        },
        methods: {
            check(){
                alert(1);
            },
            success(res){
                 = res;
            },
            handleCurrentChange(val){
                this.cur_page = val;
                (val,);
            },
            handleSizeChange(val){
                 = val;
                (,val);
            },
            getData(num,pageSize){
                let self = this;
                const params = new URLSearchParams();
                var startTime = self.value1[0];
                var endTime = self.value1[1];
                if(startTime == ''){
                    startTime = '';
                }else{
                    startTime = (startTime);
                }
                if(endTime == ''){
                    endTime = ''
                }else{
                    endTime = (endTime);
                }
                 = {
                    userName:,
                    realName:,
                    isClose:,
                    beginDate:startTime,
                    endDate:endTime
                }
                if(!num){
                    num = 1
                }
                if(!pageSize){
                    pageSize = 10
                }
                let data = (,num,pageSize);
                ('param',data);
                if(.NODE_ENV === 'development'){
                     = '/s1/copUser/getUserList';
                };
                self.$(, params).then((res) =&gt; {
                     = ;
                     = ;
                })
            },
            indexMethod(index) {
                return index + 1;
            },
            states(row,column){
                if( == '0'){
                    return 'efficient'
                }else{
                    return 'invalid'
                }
            },
            sex(row){
                if( == '0'){
                    return 'male'
                }else{
                    return 'female'
                }
            },
            search(){
                this.is_search = true;
                ();
            },
            formatter(row, column) {
                return ;
            },
            filterTag(value, row) {
                return  === value;
            },
            handleEdit(index, row) {debugger
                 = true;
                 = ;
                 = ;
                if( == 0){
                     = 'male';
                }else{
                     = 'female';
                }
                if( == 0){
                     = 'efficient'
                }else{
                     = 'invalid'
                }
                 = ;
                 = ;
                 = ;
                // this.$message('Edit the '+(index+1)+' line');            },
            handleCreate(){
                 = true;
                debugger
            },
            handleDelete(index, row) {
                this.$('Delete the Chapter'+(index+1)+'OK');
            },
            delAll(){
                const self = this,
                    length = ;
                let str = '';
                self.del_list = self.del_list.concat();
                for (let i = 0; i &lt; length; i++) {
                    str += [i].name + ' ';
                }
                self.$('Deleted'+str);
                 = [];
            },
            handleSelectionChange(val) {
                 = val;
            },
            // Close the dialog box            handleClose(done) {
                this.$confirm('Confirm to close?  ')
                  .then(_ =&gt; {
                    done();
                  })
                  .catch(_ =&gt; {});
              }
        }
    }
&lt;/script&gt;
&lt;style scoped&gt;
.handle-box{
    margin-bottom: 20px;
}
.handle-select{
    width: 120px;
}
.handle-input{
    width: 150px;
    display: inline-block;
}
.el-dropdown-link{
    color: #22A4E5!important;
    cursor: pointer;
}
.dropbtn{
    width: 100px;
    display: block;
    margin-left: 0px!important;
}
.el-dialog--small{
    width: 20%!important;
}
&lt;/style&gt;

Subcomponents

&lt;template&gt;
&lt;el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"&gt;
  &lt;el-form-item label="Login name" prop="userName"&gt;
    &lt;p&gt;{{dialogCreate}}&lt;/p&gt;
    &lt;el-input v-model="" v-on:change="vaildInput(this)"&gt;&lt;/el-input&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="Name" prop="realName"&gt;
    &lt;el-input v-model="" v-on:change="vaildInput(this)"&gt;&lt;/el-input&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="gender" prop="sex"&gt;
    &lt;el-radio-group v-model=""&gt;
      &lt;el-radio label="male" value="0"&gt;&lt;/el-radio&gt;
      &lt;el-radio label="female" value="1"&gt;&lt;/el-radio&gt;
    &lt;/el-radio-group&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="Mobile phone" prop="mobile"&gt;
    &lt;el-input v-model="" v-on:change="vaildInput(this)"&gt;&lt;/el-input&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="Email" prop="email"&gt;
    &lt;el-input v-model="" v-on:change="vaildInput(this)"&gt;&lt;/el-input&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="state" prop="valid"&gt;
    &lt;el-radio-group v-model=""&gt;
      &lt;el-radio label="efficient"&gt;&lt;/el-radio&gt;
      &lt;el-radio label="invalid"&gt;&lt;/el-radio&gt;
    &lt;/el-radio-group&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item label="User Terminal Number" prop="remark"&gt;
    &lt;el-input v-model="" v-on:change="vaildInput(this)"&gt;&lt;/el-input&gt;
  &lt;/el-form-item&gt;
  &lt;el-form-item&gt;
    &lt;el-button type="primary" @click="submitForm('ruleForm')"&gt;Create now&lt;/el-button&gt;
    &lt;el-button @click="resetForm('ruleForm')"&gt;Reset&lt;/el-button&gt;
  &lt;/el-form-item&gt;
&lt;/el-form&gt;
&lt;/template&gt;
&lt;script&gt;
// import Vue from 'vue';
// import Router from 'vue-router';
    let Base64 = require('js-base64').Base64;
  export default {
    props:['dialogCreate'],
    data() {
      return {
        ruleForm: {
          userName: '',
          realName:'',
          mobile:'',
          email:'',
          remark:'',
        },
        sex:'',
        valid:'',
        url:'/s1/copUser/addUser',
        dataObj:{},
        rules: {
          userName: [
            { required: true, message: 'Please enter the login name', trigger: 'blur' },
            { min: 3, max: 5, message: 'Length between 3 and 5 characters', trigger: 'blur' }
          ],
          realName: [
            { required: true, message: 'Please enter your name', trigger: 'blur' }
          ],
          sex: [
            { required: true, message: 'Please choose gender', trigger: 'change' }
          ],
          mobile: [
            { required: true, message: 'Please enter the mobile phone', trigger: 'blur' }
          ],
          email: [
            { required: true, message: 'Please enter your email', trigger: 'blur' }
          ],
          valid: [
            { required: true, message: 'Please select status', trigger: 'change' }
          ],
          remark: [
            { required: true, message: 'Please fill in the user terminal number', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {debugger
        let self = this;
        (self);
        const params = new URLSearchParams();
        let sex1 = '',isClose1 = '';
        if( == 'male'){
            sex1 = 0;
        }else{
            sex1 = 1;
        }
        if( = 'efficient'){
            isClose1 = '1';
        }else{
            isClose1 = '0';
        }
        let psw = ('123456');
         = {
            "userName":,
            "realName":,
            "sex":sex1,
            "passWord":psw,
            "mobile":,
            "email":,
            "remark":,
            "isClose":
        }
        let data = ();
        (data);
        ('param',data);
        if(.NODE_ENV === 'development'){
                 = '/s1/copUser/addUser';
            };
        this.$refs[formName].validate((valid) =&gt; {
          if (valid) {
            self.$(, params).then((res) =&gt; {
                if( == '0000'){
                    this.$emit('success',false);
                    this.$({
                          message: 
                        });
                }else{
                    this.$();
                }
                });
            alert('submit!');
          } else {
            ('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      },
      vaildInput(elem){
        (this.$);
      }
    }
  }
&lt;/script&gt;

Summarize

The above is personal experience. I hope you can give you a reference and I hope you can support me more.