gpt4 book ai didi

javascript - Angular2 和 xhr 事件监听器

转载 作者:太空狗 更新时间:2023-10-29 18:34:07 25 4
gpt4 key购买 nike

如何访问 addEventListener 函数中的 HTML 元素?或者我可以为这个函数中的组件属性设置值吗?我想取得上传文件的进度百分比。 enter image description here

sample.component.ts :

import {Component} from '@angular/core';
@Component({
selector: 'Account-Management',
templateUrl: 'AddUser.template.html',
})
export class AddUserComponent {
host: string = "http://" + window.location.hostname + (location.port ? ':' + location.port : '');
URL = this.host + '/api/apiUser/Upload';

upload() {
this.makeFileRequest(this.URL, [], this.filesToUpload).then((result) => {
console.log(result);
}, (error) => {
console.error(error);
});
}

fileChangeEvent(fileInput: any) {
this.filesToUpload = <Array<File>>fileInput.target.files;
}
percent = "0";
makeFileRequest(url: string, params: Array<string>, files: Array<File>) {
var i = 1;

return new Promise((resolve, reject) => {
var formData: any = new FormData();
var xhr = new XMLHttpRequest();
for (var i = 0; i < files.length; i++) {
formData.append("uploads[]", files[i], files[i].name);
}
xhr.upload.addEventListener("progress", this.progressFunction, false);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
resolve(JSON.parse(xhr.response));
} else {
reject(xhr.response);
}
}
}
xhr.open("POST", url, true);
xhr.send(formData);
});
}

progressFunction(evt, d) {

if (evt.lengthComputable) {
//percent changed but I couldn't see change in html.
this.percent = Math.round(evt.loaded / evt.total * 100) + "%";
//log works correctly.
console.log("PERCENT : ", this.percent);
//log works correctly.
console.log(Math.round(evt.loaded / evt.total * 100) + "%");
}
}

AddUser.template.html :

                <div class="form-group">
<input type="file" (change)="fileChangeEvent($event)" placeholder="Upload file..." />
<button type="button" (click)="upload()">Upload</button>
<span>{{percent}}</span>

</div>

enter image description here

最佳答案

你失去了上下文。尝试像这样使用箭头函数:

xhr.upload.addEventListener("progress", (evt) => this.progressFunction(evt), false);

另见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

关于javascript - Angular2 和 xhr 事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com