我的問題與這些非常相似,但我沒有解決我的問題;無法在訂閱功能中獲得'this'組件
cannot access to this of component in subscribe function
'this' scope in typescript callback function
Cannot Access Component Variables in Subscribe when using chrome inspector
unable to get component variables inside a RxJS subscribe() function
這裏是我的打字稿組件類:
export class Test{
x: string;
}
export class TestComponent implements OnInit{
test: Test;
constructor(private testService: TestService){}
ngOnInit(){
this.testService.getTest()
.subscribe((res) => { this.test = res.test;}, ...);
console.log(this.text.x) //it becomes undefined
}
}
我使用一飲而盡-T ypescript和輸出就像這些;
//when targeting es6
let testComponent = class TestComponent ... {
constructor(testService){
this.testService = testService;
}
ngOnInit(){
this.testService.getTest()
.subscribe((res) => {this.test = res.test;}, ...);
console.log(this.text.x)
}
}
//when targeting es5
var TestComponent = (function(){
function TestComponent(testService){
this.testService = testService;
}
TestComponent.prototype.ngOnInit = function(){
var _this = this;
this.testService.getTest()
.subscribe(function (res) { _this.test = res.test }, ...);
console.log(this.text.x)
}
}())
當我想嘗試達到'this.test.x'時,我從兩個輸出的瀏覽器中得到以下錯誤;
EXCEPTION: Error: Uncaught (in promise): TypeError: Cannot read property 'x' of undefined
當我登錄了this.test
,它是undefined
。我的TestService被正確注入,請求來到我的API並且res.test
包括我需要但是我不能使用this.test
,因爲它總是未定義的。我不知道我在做什麼錯。有沒有人可以幫助我?最後,我想問一下,在考慮瀏覽器兼容性,es5或es6時,我應該選擇哪一個?
什麼是「whateverItIs」。我在你的代碼中沒有看到你發佈的內容?展開構造函數並放置一個'console.log(testService)'以確保服務正在傳遞/注入到構造函數中。 – Martin
這只是我的Test類的任何屬性,我寫了'whateverItIs'的屬性名稱。 TestService被正確注入,我的API獲取請求。 – ulubeyn
您可以請包括您的測試課程的一些代碼。謝謝。我只想看看真實的屬性名是什麼,所以我可以看到哪個對象是'undefined'。 – Martin