Vue-Element-Admin项目学习笔记(9)表单组件封装,父子组件双向通信

前情回顾:

vue-element-admin项目学习笔记(1)安装、配置、启动项目
vue-element-admin项目学习笔记(2)main.js
文件分析

vue-element-admin项目学习笔记(3)路由分析一:静态路由
vue-element-admin项目学习笔记(4)路由分析二:动态路由及permission.js
vue-element-admin项目学习笔记(5)路由分析三:动态路由匹配逻辑
Vue-Element-Admin项目学习笔记(6)Vuex状态管理
Vue-Element-Admin项目学习笔记(7)用Node.js写一个简单后端接口
Vue-Element-Admin项目学习笔记(8)配置表单校验规则

1、需求分析

我们需要一个添加学生的功能,在功能中,有一个选择专业的下拉框:
在这里插入图片描述
该组件的下拉框内容,是我们通过后端接口动态获取的
且,改下拉框,很可能在其他页面中,也要应用到
所以,我们需要把它封装一个独立的组件。
这里就涉及到了,父子组件间通信的问题。

我们先回顾一下,我们学过的,vue父子通信的几种实现(不说vuex)了

2、父子组件通信回顾

这里不包括vuex

写了两篇父子间通信笔记,需要的小伙伴,可以自行回顾一下。

3、组件拆分

  • 拆分前:
...
    
    <el-row style="margin-top: 30px;">
      <el-col :span="24">
        <el-form-item label="所选专业" prop="zy">
        
          <!--  拆分前 的下拉框 -->
 
            <el-select v-model="zy" placeholder="请选择" @change="$emit('input',$event)">
                <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value">
                </el-option>
            </el-select>
          
       </el-form-item>
      </el-col>
    </el-row> 

...
  • 拆分后:
...
    
    <el-row style="margin-top: 30px;">
      <el-col :span="24">
        <el-form-item label="所选专业" prop="zy">
        
          <!--  拆分后的组件 -->
          <select-zhuan v-model="stuForm.zy"/>
          
       </el-form-item>
      </el-col>
    </el-row> 

...

4、组件通信

组件通信过程是:

  1. 父组件把用户点击的项目传给子组件:父组件利用v-model方法,把用户选定值通过prop给到子组件

  2. 子组件接收父组件传来的数值:

    • 子组件通过props得到数据

      props:{
          value:{
              type:String,
              default:''
          }
      },
      ...
          data() {
      return {
      options: [{
        value: 'python',
        label: 'python'
      }, {
        value: 'c',
        label: 'C语言'
      }, {
        value: 'java',
        label: 'java开发'
      }, {
        value: 'vue',
        label: 'vue前端'
      }, {
        value: 'mysql',
        label: 'MySQL数据库'
      }],
      zy:this.value //避免直接修改props
      
      }
      

    }
    ```

  3. 子组件将数据传给父组件

    • <el-select v-model="zy" placeholder="请选择" @change="$emit('input',$event)">
    • 在触发change事件的时候,使用$emit('input',$event)将值传给父组件
    • 父组件v-model接收到数据
  4. 父组件收集到子组件的传值,用于提交

    • …略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

藏蓝色攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值