一般表单页面和提交表单的提交按钮都是在同一个页面,我这个demo是模拟那种类似于表单是一个子组件弹层,提交按钮在父组件中,下面是完整的代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>element-ui开发: 表单在子组件,确定按钮在父组件, 处理表单校验</title>
  <!--引入 element-ui 的样式,-->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  <!-- 引入element 的组件库-->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>

<body>
  <div id="app">
    <child ref="child"></child>
    <el-button type="primary" @click="submitFun">确认</el-button>
  </div>
  <script>

    // 子组件-----------------------------------------------------------------------------------------------
    Vue.component('child', {
      template:
        `
        <div>
          <el-form ref="dataForm" :inline="true" label-width="80px" :model="temp" label-position="left" :rules="rules">
            <el-form-item label="姓名" prop="name">
              <el-input v-model.trim="temp.name" show-word-limit maxlength="45" type="text" placeholder="请输入姓名" />
            </el-form-item>
          </el-form>
        </div>
        `,
      name: 'child',
      props: {

      },
      data() {
        return {
          // 表单数据
          temp: {
            name: ''
          },
          rules: {
            name: [{ required: true, message: '姓名不能为空' }]
          }
        }
      },
      methods: {
      }
    })
    // 父组件-----------------------------------------------------------------------------------------------
    new Vue({
      name: 'parent',
      el: '#app',
      data() {
        return {
          attrs2: '接收父组件里数据'
        }
      },
      methods: {
        // 赠品弹层点击确认
        async submitFun() {
          const result = this.$refs['child'].$refs['dataForm'];
          let verify;
          try {
            verify = await result.validate();
          } catch (err) {
            verify = err
          };
          if(typeof verify && verify == true) {
            console.log(this.$refs['child'].temp, '表单数据')
          }
        },
      }
    })

  </script>
</body>

</html>

我的一个道姑朋友
80 声望4 粉丝

星光不问赶路人,岁月不负有心人。