我在打字稿方面遇到一些问题,我有以下代码:
private loadTeams = function(){
let token = sessionStorage.getItem('token');
if(token !== undefined && token !== null && token !== ''){
this._userService.getUserByToken(token)
.subscribe(user => {
this._teamService.getTeamsByUser(token, user)
.subscribe(data => {
this.teamList = data.data;
}, error => {
});
}, error => {
});
} else {
sessionStorage.removeItem('token');
}
}
给我错误:
错误TypeError:“ _ this._teamService.getTeamsByUser不是函数”
在其他文章中,人们告诉使用箭头功能,但我认为它已经是箭头功能了?
我尝试使用 让那个= this; ,然后在其中调用 that 而不是 this 第二个功能,但是没有用。
我见过人们做的另一件事是使用 .bind(this),但我不知道该在哪里做。
有人可以向我解释为什么会发生这种情况以及如何解决吗?
答案 0 :(得分:1)
确定的问题已解决。我只是像您告诉我的那样使用private loadTeams(){...}
,但是我不知道为什么我必须关闭角度并重新使用。
答案 1 :(得分:1)
您的_teamService注入或构造可能有问题。只要未定义服务调用,就可以以不同的方式声明loadTeam。
所以
loadTeams() { ...
要么
loadTeams = function() {...
要么
loadTeams = () => { ...
如果一切正确初始化,那么所有方法都可以工作。
我确实拼凑了一个Typescript便签本来玩,不能让其中的任何一个失败,但随后我的“ _teamsService”假版再次被初始化。
请参见打字稿示例Typescript example。您可以用这三种方式中的任何一种替换函数定义,一切正常。
答案 2 :(得分:0)
this._userService来自哪里?可能尚未初始化。
您忘了将其注入构造函数吗?
答案 3 :(得分:0)
执行此操作时:
private loadTeams = function(){
// this here refers to the function
}
这是您应该做的:
private loadTeams() {
// this refers to the instance of the class
}
或者,将其绑定到构造函数中,如下所示:
constructor(/* inject stuff here */) {
this.loadTeams = this.loadTeams.bind(this)
}
private loadTeams = function(){
// this refers to the instance of the class
}
但是,我不认为这是您的问题。
如果这是您的问题,那么this._userService
将不确定,并且您在致电null pointer error
时会得到undefined.getUserByToken(token)
仅供参考,我在此帖子中已经说过16次了,您发现了吗?