addEventListener 内 this 指向问题

2019-12-25  本文已影响0人  微笑的大步向前走

相关问题前提:
最近在做一个 已知 audio 的 url 获取 其 时长,并且push 进去数组的问题

上代码:

            if (fileType === 'audio') {
              let audioDom = new Audio(url)
              let _this = this
              audioDom.addEventListener('loadedmetadata', function (_event) {
                embeddedData.audio = {
                  id: fileUrl,
                  Extension: fileType.toUpperCase(),
                  fileExtension: fileType.toUpperCase(),
                  // 获取音频的长度
                  duration: Math.round(audioDom.duration)
                }
                fileInfo.audioTime = Math.round(audioDom.duration)
                _this.embeddedFiles.push(embeddedData)
                _this.$emit('uploadSuccess', fileInfo)
              })
            } else {
              fileType === 'image' ? this.embeddedImages.push(embeddedData) : this.embeddedFiles.push(embeddedData)
              this.$emit('uploadSuccess', fileInfo)
            }

记录一下:
1、首先要常见一个 audio dom
2、然后 用 addEventListener('loadedmetadata', function(){}),这个事件是说 等 这个audio 都加载完成了以后 ,就可以获取到 audio的 相关 参数,比如说 duration值
3、这一点需要注意:在 这个事件里面,数据是拿不出来的,所以 ,我就用 原本的一个全局的 数据push 进去了,但是用的是 this.embeddedFiles.push(embeddedData),但是 报错表示 this.embeddedFiles 不存在,是由于作用域的问题,所以要 先 let _this = this,再用 _this.embeddedFiles.push(embeddedData) 就可以了

ok ,仅此记录

上一篇 下一篇

猜你喜欢

热点阅读