在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ Vue 中父組件如何獲取子組件中form的值

Vue 中父組件如何獲取子組件中form的值

父組件:

<template>
    <el-button type="primary" @click="dialogAddProductVisible = true">添加</el-button>
    <el-dialog title="添加產(chǎn)品彈窗" :visible.sync="dialogAddProductVisible">
  <addForm></addForm>
  <div slot="footer" class="dialog-footer">
    <el-button @click="addSubmit">確定</el-button>
    <el-button @click="dialogAddProductVisible = false">取消</el-button>
  </div>
</el-dialog>
</template>
<script>
  import addForm from '@/view/product/Add.vue'
  export default {
      components: {addForm},
      data () {
          return {
            dialogAddProductVisible: false,
         }
      },
      methods: {
          addSubmit () {
            // 需要打印出表單中的信息
            this.dialogAddProductVisible = false
          }
        }
   }
</script>

子組件為:

<template>
  <el-form ref="form" :model="form" label-width="80px">
    <el-form-item label="活動(dòng)名稱">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
    <el-form-item label="活動(dòng)區(qū)域">
      <el-select v-model="form.region" placeholder="請(qǐng)選擇活動(dòng)區(qū)域">
        <el-option label="區(qū)域一" value="shanghai"></el-option>
        <el-option label="區(qū)域二" value="beijing"></el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="活動(dòng)時(shí)間">
      <el-col :span="11">
        <el-date-picker type="date" placeholder="選擇日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
      </el-col>
      <el-col class="line" :span="2">-</el-col>
      <el-col :span="11">
        <el-time-picker type="fixed-time" placeholder="選擇時(shí)間" v-model="form.date2" style="width: 100%;"></el-time-picker>
      </el-col>
    </el-form-item>
    <el-form-item label="即時(shí)配送">
      <el-switch v-model="form.delivery"></el-switch>
    </el-form-item>
    <el-form-item label="活動(dòng)性質(zhì)">
      <el-checkbox-group v-model="form.type">
        <el-checkbox label="美食/餐廳線上活動(dòng)" name="type"></el-checkbox>
        <el-checkbox label="地推活動(dòng)" name="type"></el-checkbox>
        <el-checkbox label="線下主題活動(dòng)" name="type"></el-checkbox>
        <el-checkbox label="單純品牌曝光" name="type"></el-checkbox>
      </el-checkbox-group>
    </el-form-item>
    <el-form-item label="特殊資源">
      <el-radio-group v-model="form.resource">
        <el-radio label="線上品牌商贊助"></el-radio>
        <el-radio label="線下場(chǎng)地免費(fèi)"></el-radio>
      </el-radio-group>
    </el-form-item>
    <el-form-item label="活動(dòng)形式">
      <el-input type="textarea" v-model="form.desc"></el-input>
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data () {
      return {
        form: {
          name: '',
          region: '',
          date1: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          desc: ''
        }
      }
    }
  }
</script>
回答
編輯回答
陌南塵

利用ref和$refs

2018年2月15日 01:35
編輯回答
毀與悔

如果確實(shí)要將這兩個(gè)按鈕外置的話,

<addForm ref="addForm"></addForm>

增加一個(gè)ref,父組件能通過$refs直接拿到子組件實(shí)例、

  addSubmit () {
    // 需要打印出表單中的信息
    console.log(this.$refs.addForm.form)
    this.dialogAddProductVisible = false
  }

更好的做法還是將提交跟取消按鈕放置到AddForm組件里面。
內(nèi)部的事情內(nèi)部處理。
要控制dialog顯隱的話可以采用自定義事件。
也可以將顯隱綁定的屬性向下傳遞下去,Vue提供了.sync修飾符來減少代碼。

2017年2月26日 09:43
編輯回答
負(fù)我心

略微看了以下代碼,有以下思路,僅供參考:

  1. 點(diǎn)擊,觸發(fā)emit事件,攜帶表單值作為參數(shù),父組件on去監(jiān)聽事件。
  2. 不點(diǎn)擊,在子組件中watch這個(gè)表單的值,提交vuex,然后父組件去computed vuex中的對(duì)應(yīng)值,或者同1去觸發(fā)當(dāng)前組件的emit方法。

推薦1.
另:數(shù)據(jù)驅(qū)動(dòng)一切。。。

2018年3月16日 15:50