Javascript TypeScript,Angular 1.x:lambda函数如何影响属性分辨率?
编辑: 我能够解决这个问题,但我不知道为什么。所以,我修改了这个问题,以反映我现在的立场。我把老问题留作参考 新问题: 将lambda函数更改为旧式函数修复了TS编译器无法在Javascript TypeScript,Angular 1.x:lambda函数如何影响属性分辨率?,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,编辑: 我能够解决这个问题,但我不知道为什么。所以,我修改了这个问题,以反映我现在的立场。我把老问题留作参考 新问题: 将lambda函数更改为旧式函数修复了TS编译器无法在$state上找到属性的问题。我不知道为什么会这样。所以,我现在的问题是 lambda函数如何影响属性解析?和.. 我如何确定何时使用lambda与旧式函数? 通过还原为旧式函数修复了属性解析: 旧问题如下: 标题:TypeScript,Angular 1.x:$state.go不存在——但它在同一文件的其他地方存在 我正
$state
上找到属性的问题。我不知道为什么会这样。所以,我现在的问题是
lambda函数如何影响属性解析?和..
我如何确定何时使用lambda与旧式函数?
通过还原为旧式函数修复了属性解析:
旧问题如下:
标题:TypeScript,Angular 1.x:$state.go不存在——但它在同一文件的其他地方存在
我正在将Angular 1.5应用程序从vanilla JS转换为TypeScript。我遇到了一个奇怪的问题,$state
上的方法go
存在,并且不存在于同一个类中
(在下图中可能很难看到,但请注意,在第二个this.$state.go
,go
中有一条红色下划线,因为编译器认为该属性不存在)
下面是完整的课程:
export class LogoutAndInfoController implements ILogoutAndInfo {
public memberInfo: Object;
static $inject = [
'$http', '$state', 'AuthService', 'API_ENDPOINT', 'UserInfoService'
];
constructor(private $http: angular.IHttpService, private $state: angular.ui.IStateProvider,
private AuthService: AuthService, private API_ENDPOINT: IAPI_ENDPOINT, private UserInfoService: UserInfoService) {
this.memberInfo = {};
}
destroySession(): void {
this.AuthService.logout();
}
getInfo(): void {
this.$http.get(this.API_ENDPOINT["url"] + '/memberinfo').then(function (result) {
this.memberInfo = result.data["user"];
this.$state.go('login');
});
}
logout(): void {
this.AuthService.logout().then((result: any) => {
this.UserInfoService.resetUser();
this.$state.go('login');
});
}
}
我对角度框架内的TS和TS都很陌生。所以,请让我知道在我们调试之前是否还有其他代码需要查看。这实际上是因为与您可能使用的大多数其他语言相比,
在Javascript中的表现……很奇怪
在第一个示例中,调用$http.get()
。由于this
在JS中的工作方式,将调用get()
函数,并将this
设置为this的任何值。$http
就是这种情况。不过,这正是时髦开始的地方此
仅在对对象调用方法时设置,在调用新函数时保持不变。这意味着当$http.get()
调用回调时,此
仍设置为$http
,因此$state
不存在
这就是为什么您会看到var self=This的模式代码>到处都是。它允许您绑定到您所知道的此
,因此以下功能可以正常工作:
var self = this;
this.$http.get(..., function() {
self.$state.go()
});
另一方面,Lambda函数的绑定方式不同。所谓的“箭头函数”没有自己的this
上下文,因此在创建它们的函数中关闭了this
,因此它们可以按预期工作
其他资料来源:
这实际上是由于这个在Javascript中的表现……与您可能使用的大多数其他语言相比,非常奇怪
在第一个示例中,调用$http.get()
。由于this
在JS中的工作方式,将调用get()
函数,并将this
设置为this的任何值。$http
就是这种情况。不过,这正是时髦开始的地方此
仅在对对象调用方法时设置,在调用新函数时保持不变。这意味着当$http.get()
调用回调时,此
仍设置为$http
,因此$state
不存在
这就是为什么您会看到var self=This的模式代码>到处都是。它允许您绑定到您所知道的此
,因此以下功能可以正常工作:
var self = this;
this.$http.get(..., function() {
self.$state.go()
});
另一方面,Lambda函数的绑定方式不同。所谓的“箭头函数”没有自己的this
上下文,因此在创建它们的函数中关闭了this
,因此它们可以按预期工作
其他资料来源: