繁体   English   中英

从 vue.js 中的子发射传递时,值未定义

[英]value is undefined when passed from child emit in vue.js

我不确定为什么会发生这种情况,因为我的两个方法(父和子都被调用)但是实际数据没有被传递,即使我尝试传递一个简单的字符串,当从我的父母从发射接收数据:(

有人可以帮助我或者提供解释吗?

我的应用程序在 dom 中呈现为这样(这都是 html 注入而不是 vue-cli 的一部分)

<div id="app">
    <div>
      <b-button v-b-modal.modal-1>upload files</b-button>

      <b-modal id="modal-1" title="BootstrapVue" ok-title="upload">
          <div>
              <file-uploader v-on:child-to-parent="logChildData()"></file-uploader>
          </div>
      </b-modal>
    </div>
  </div> 

这是我的子组件

//component constructor
var fileUploader = Vue.extend({
  template: ' <div><div id="container" class="flexContainer"><div v-for="img in images" :key="img.name"><div :id=img.name><img height="80px" width="80px" :src=img.src alt="uploaded image"><button @click="removeItem(img.name)">X</button></div></div></div><input type="file" multiple @input="handleUpload($event)"></div>',
  data() {
      return {
        images:[],
        pdfs:[], 
      }
    },

    methods: {

      //send files back up to parent component where they can be manipulated
        sendDatatoParent(){
          console.log('sending data to parent')
          this.$emit('child-to-parent', 'a string to send')
        },


      async handleUpload(e) {

          //check file type and sort into pdfs or images based on their file extension 
          var files = e.target.files
          for(i = 0; i< files.length; i++){

            if(files[i].type === 'application/pdf'){ 
              this.pdfs.push(files[i])

            }else{
              if(files[i].type === 'image/jpeg' || files[i].type === 'image/png' || files[i].type === 'image/gif' || files[i].type === 'image/jpg'){

                //create the thumbnail img and add it to the image object
                //console.log(files[i].name)
                this.buildUrl(files[i])
              }
            }
          }
          //console.log('pdfs',this.pdfs)
          //console.log('images',this.images)

          this.sendDatatoParent()  
        },

    },    
})

// register the file uploader component inside your app so your app has a name to reference the component by
Vue.component('file-uploader', fileUploader)

这是我的父母,我应该能够从 $emit 记录数据

// create the main vue app (this contains and renders all your components, it is the parent)
new Vue({
  el: '#app',
  methods:{  

    /*
       listens for the custom $emit event (childToParent) which is passed to your child component (see above ^)
       when fired it will grab the child's data and pass the value here (the parent component)
    */
    logChildData(value){
      console.log('logging the value from emit',value)
    }

  }
})

在父级的子组件标记中,您正在调用父级 function 没有参数,因此该值将不存在。 通过$event或完全删除括号(推荐)。 这样做:

v-on:child-to-parent="logChildData"

或者:

v-on:child-to-parent="logChildData($event)"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM