在Angular中,在.subscribe()内部返回一个字符串会导致无限的XHR请求。这是因为Observable的订阅器会持续触发,直到它被取消。
为了解决这个问题,你可以使用rxjs的操作符take(1)或first()来限制只执行一次订阅。这样,当订阅器触发一次后,它就会自动取消订阅,避免无限的XHR请求。
下面是一个示例代码:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { take } from 'rxjs/operators';
@Component({
selector: 'app-example',
templateUrl: './example.component.html',
styleUrls: ['./example.component.css']
})
export class ExampleComponent implements OnInit {
data: string;
constructor(private http: HttpClient) { }
ngOnInit() {
this.getData().pipe(take(1)).subscribe((response: string) => {
this.data = response;
});
}
getData() {
return this.http.get('https://api.example.com/data');
}
}
在上面的代码中,我们使用了take(1)操作符来只执行一次订阅,当订阅器触发一次后,它就会自动取消订阅。这样,无论.subscribe()内部返回什么,它都不会触发无限的XHR请求。
请注意,你需要确保在使用rxjs操作符之前先安装和导入rxjs库,以便使用take操作符。