gpt4 book ai didi

angular - Angular 2 最新版本中的 Rxjs Observable 问题

转载 作者:行者123 更新时间:2023-12-03 12:24:44 25 4
gpt4 key购买 nike

你好我正在尝试更新登录文本 var通过 Observable 回调。我正在接收 中的数据控制台日志但数据在 HTML 中没有改变。 this.fadeInputs()回调成功,但数据未更新。

组件

import {Component, OnInit} from '@angular/core';
import {UserService} from "../services/user.service";
import {Observable} from "rxjs";
import {RequestUpload} from "../_Class/RequestUpload";
let request = require('request');

@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [UserService]
})
export class LoginComponent implements OnInit {

fade: boolean = false;
signinText: string;

constructor(private userService: UserService) {

}

ngOnInit() {
this.fadeInputs(true);
this.call('login/get','POST',{mobile:9000000000,password:1234},[],false).subscribe(
(value) => {
console.log(value);
this.fadeInputs(false);
},
(err) => {
console.log(err);
this.fadeInputs(false);
},
() => {
this.fadeInputs(false);
}
);
}

fadeInputs(fadeType: boolean) {
console.log("Working");
this.fade = fadeType;
this.signinText = !this.fade ? "Sign In" : "Please Wait!";
}


private call(url: string, type: string, postData: {}, files: string[], cache: boolean) {
url = "http://192.168.40.136:146/" + url;

var RequestConfig = {};
RequestConfig['method'] = type;
RequestConfig['url'] = url;
RequestConfig['auth'] = {
'user': "admin",
'pass': "1234"
};

let CheckFileSize = 0;
if (type == "POST") {
if (files.length > 0) {
if (postData == null) {
postData = {};
}
let i = 0;
for (let file of files) {
postData['file_' + i] = fs.createReadStream(file);
i++;
CheckFileSize += fs.statSync(file).size;
}
}
if (postData != null) {
RequestConfig['formData'] = postData;
}
}
return Observable.create((observer) => {
let r = request(RequestConfig, (error, response, body) => {
if (error || response.statusCode != 200) {
observer.error({
error: error,
response: response,
});
} else {
observer.next({response: response, body: body});
observer.complete()
}
}).on('drain', () => {
observer.next({upload: new RequestUpload(r.req.connection.bytesWritten, CheckFileSize)});
});
})
}

}

我尝试了下面的代码及其工作。不知道“请求”模块有什么问题

下面的代码工作正常。
ngOnInit() {
this.fadeInputs(true);
Observable.create((observer) => {
setInterval(() => {
observer.next('check')
}, 1000)
}).subscribe(
(value) => {
this.fadeInputs(!this.fade);
}
)
}

最佳答案

请求模块正在其他区域上运行。所以需要将它包裹到 Angular 区域。

采用:

this.zone.run(() => {
// Your Code Here
})

感谢@GünterZöchbauer
constructor(private userService: UserService, private zone: NgZone) {

}
return Observable.create((observer) => {
let r = request(RequestConfig, (error, response, body) => {
this.zone.run(() => {
if (error || response.statusCode != 200) {
observer.error({
error: error,
response: response,
});
} else {
observer.next({response: response, body: body});
observer.complete()
}
})
}).on('drain', () => {
this.zone.run(() => {
observer.next({upload: new RequestUpload(r.req.connection.bytesWritten, CheckFileSize)});
})
});
})

关于angular - Angular 2 最新版本中的 Rxjs Observable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40357360/

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