简体   繁体   English

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

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

I'm not sure why this is happening as both my methods (both parent and child are being called) but the actual data isn't being passed, even when I try to pass a simple string the data is 'undefined' when logged from my parent that receives the data from emit:(我不确定为什么会发生这种情况,因为我的两个方法(父和子都被调用)但是实际数据没有被传递,即使我尝试传递一个简单的字符串,当从我的父母从发射接收数据:(

can someone help me out or maybe provide an explanation?有人可以帮助我或者提供解释吗?

my app is rendered like so in the dom (this is all a part of an html injection not vue-cli)我的应用程序在 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> 

here's my child component这是我的子组件

//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)

here is my parent where I should be able to log the data from $emit这是我的父母,我应该能够从 $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)
    }

  }
})

In your child component tag in parent, you are calling the parent function with no parameter, so the value will not be there.在父级的子组件标记中,您正在调用父级 function 没有参数,因此该值将不存在。 Either pass $event or remove the parenthesis altogether (recommended).通过$event或完全删除括号(推荐)。 So do:这样做:

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

or alternatively:或者:

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

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

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