鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ vue 一個(gè)頁面使用兩次相同組件, v-on 受影響

vue 一個(gè)頁面使用兩次相同組件, v-on 受影響

在同一個(gè)頁面中使用了兩次同一個(gè)組件, 在點(diǎn)擊第一個(gè)組件后, 第二個(gè)組件的 v-on的回調(diào)函數(shù)受到影響

clipboard.png

在第一個(gè)測(cè)上傳明細(xì)組件成功后, 第二次點(diǎn)擊實(shí)物照片 時(shí)的回調(diào)變成了handleUploadPurchaseDetailSuccess

upload.vue

<template>
  <div>
    <div class="el-upload el-upload--text" @click="handleClickInput">
      <div class="el-upload-dragger">
        <i class="el-icon-upload"></i>
        <div class="el-upload__text"><em>點(diǎn)擊上傳</em>自動(dòng)解析文件</div>
      </div>
      <input type="file"
             name="file"
             id="file"
             accept="accept"
             class="el-upload__input"
             @change="handleFileChange">
    </div>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {
      props: {
          accept: {
              type: String,
        default: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'
      }
    },
    data () {
      return {
          file: {}
      }
    },
    mounted () {},
    methods: {
      handleClickInput: function () {
        document.getElementById('file').click()
      },
      handleFileChange: function (event) {
        this.file = event.target.files[0]
        this.upload()
        event.target.value = ''
      },
      upload() {
        const self = this
        if (self.file) {
          var formData = new FormData()
          formData.append('file', self.file)
          self.$api.post('/file/upload', formData, function (res) {
              const fileInfo = {
                  fileId: res,
              fileName: self.file.name
            }
            self.$emit('upload-success', fileInfo)
          }, function (e) {

          })
        }
      }
    }
  }
</script>

clipboard.png

情況一:

   第一次上傳采購明細(xì) 控制臺(tái)打印 `function: handleUploadPurchaseDetailSuccess`
   第二次上傳實(shí)物照片 控制臺(tái)打印 `function: handleUploadPurchaseDetailSuccess`
   


大家看下什么毛病, 如果還需要哪里的代碼提出來, 我貼上

回答
編輯回答
毀憶

我看你剛才寫了情況二的,但我測(cè)試時(shí)也沒有遇到情況二。

我的理解是,應(yīng)該不會(huì)有情況二(即出現(xiàn)調(diào)用到第二個(gè)函數(shù)的情況)

因?yàn)槟阍谕鈱拥膁iv中加了

handleClickInput: function () {
        document.getElementById('file').click()
      },
      

點(diǎn)擊事件,并把點(diǎn)擊轉(zhuǎn)移到頁面中id為file的元素上,當(dāng)你頁面中同時(shí)使用兩個(gè)組件時(shí),就出現(xiàn)了兩個(gè)相同的id,于是你的選擇器永遠(yuǎn)只能選擇到第一個(gè)id為file的元素。

問題就出現(xiàn)在這里,處理你想要的視圖效果有很多其它方法,不使用你這個(gè)函數(shù)就不會(huì)出現(xiàn)你這種問題了。

2018年7月28日 05:31