Получить значение из emit в поле ввода с помощью Vue - PullRequest
0 голосов
/ 24 января 2019

Я знаю, что это простой ответ, но я застрял. У меня есть загрузка изображения в форме. После нескольких уроков я успешно создал метод загрузки. Моя проблема, как только изображение загружено в хранилище Firestore, которое я использую this.$emit('imgurl', downloadURL)

Моя проблема в том, что я не знаю, как получить это значение, поэтому, когда пользователь отправляет форму, URL-адрес добавляется в базу данных.

Части кода:

HTML:

<div class="field avatar">
    <label for="avatar">Avatar</label>
    <input type="file" name="imgurl" accept="image/*" @change="detectFiles($event.target.files)">
    <div class="progress-bar green" :style="{ width: progressUpload + '%'}">{{ progressUpload }}%</div>
    <img class="avatar" v-bind:src="this.downloadURL">
</div>

Методы:

detectFiles (fileList) {
    Array.from(Array(fileList.length).keys()).map( x => {
        this.upload(fileList[x])
    })
},
upload (file) {
    var storage = firebase.storage();
    this.uploadTask = storage.ref('avatars/'+file.name).put(file);
}

Часы

watch: {
        uploadTask: function() {
            this.uploadTask.on('state_changed', sp => {
                this.progressUpload = Math.floor(sp.bytesTransferred / sp.totalBytes * 100)
            }, 
            null, 
            () => {
                this.uploadTask.snapshot.ref.getDownloadURL().then(downloadURL => {
                    this.downloadURL = downloadURL
                    this.$emit('imgurl', downloadURL)

                })
            })
        }
    }

Добавить в базу данных:

db.collection('teams').add({
    team_name: this.team_name,
    team_id: this.team_id,
    bio: this.bio,
    url: this.imgurl,
}).then(() => {
   this.$router.push({ name: 'Admin' })
}).catch(err => {
   console.log(err)
})

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете передать функцию в качестве опоры дочернему компоненту, а затем вызвать эту функцию, передав свой downloadURL в качестве аргумента.

Родительский компонент


HTML

<child passURL="getDownloadURL">

JS

data: {
    return {
        downloadURL: null
    }
},
methods: {
    getDownloadURL: function(url) {
        this.downloadURL = url
    }
}

Дочерний компонент


JS

props: ['passURL'],

Внутри вашего наблюдателя вы можете позвонить

this.passURL(downloadURL)

вместо $ emit.

0 голосов
/ 24 января 2019

Я нашел ответ. Я добавил скрытое поле ввода <input type="hidden" name="imgurl" v-model="imgurl"> и заменил излучатель на this.imgurl = downloadURL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...