Angularjs 为什么我必须在typescript角度控制器函数中重新声明属性
上面的代码相当标准。我的问题是,当我想在函数中访问Angularjs 为什么我必须在typescript角度控制器函数中重新声明属性,angularjs,typescript,Angularjs,Typescript,上面的代码相当标准。我的问题是,当我想在函数中访问foo:string时,我必须这样做 export interface IFooModel { foo:string; fooFunction(fooProp:string):void; } export class FooCtrl implements IFooModel { constructor(public foo:string){ } fooFunction(fooProp:string):
foo:string
时,我必须这样做
export interface IFooModel {
foo:string;
fooFunction(fooProp:string):void;
}
export class FooCtrl implements IFooModel {
constructor(public foo:string){
}
fooFunction(fooProp:string):void{
}
}
为什么我必须将
this.foo
设置为一个变量才能在另一个函数中访问它,而不是只写this.foo
?在一些函数中,我最终得到了构造函数中已经声明的大约4个变量声明。有没有更好的办法?我感觉控制器中有太多重复代码。在调用函数之前将值放入局部变量中的唯一原因是,您希望类超出范围(即,范围会发生变化,例如回调或异步操作)
通过将值放入局部变量,它将成为函数闭包的一部分,并且该值将与函数本身一起存储
这是JavaScript最棘手的方面之一——作用域有点古怪
还有其他方法可以解决这个问题,包括胖箭头
fooFunction(fooProp:string):void{
var fooAgain = this.foo;
// Pretend i set it up properly for $mdDialog to work
this.$mdDialog.show(options).then(function(answer: boolean) {
if (answer) {
// fooAgain works
// this.foo does not work
}
}
或
调用
/应用
,这允许您设置范围。在调用函数之前将值放入局部变量的唯一原因是,您希望类超出范围(即,可能会发生某些事情来更改范围,例如回调或异步操作)
通过将值放入局部变量,它将成为函数闭包的一部分,并且该值将与函数本身一起存储
这是JavaScript最棘手的方面之一——作用域有点古怪
还有其他方法可以解决这个问题,包括胖箭头
fooFunction(fooProp:string):void{
var fooAgain = this.foo;
// Pretend i set it up properly for $mdDialog to work
this.$mdDialog.show(options).then(function(answer: boolean) {
if (answer) {
// fooAgain works
// this.foo does not work
}
}
或者
调用
/应用
,这允许您设置范围。是的,这在Javascript中是一个问题,但幸运的是在TypeScript中,这个问题不再多亏胖箭头!耶
胖箭头类似于匿名函数,但可以为您处理这个变量。
让我告诉你:
() => {
// this.foo is now preserved
}
使用fat箭头,现在将在JS中编译为:
fooFunction(fooProp:string):void {
// Pretend i set it up properly for $mdDialog to work
this.$mdDialog.show(options).then((answer: boolean) => {
if (answer) {
this.foo = "";
}
});
}
因此,Typescript会自动为您创建一个\u这个变量,这样您就不会再有问题了。如果你问我的话,那就相当不错了
以下是箭头函数的文档:
是的,这在Javascript中是一个问题,但谢天谢地,在TypeScript中,这个问题不再多亏胖箭头!耶
胖箭头类似于匿名函数,但可以为您处理这个变量。
让我告诉你:
() => {
// this.foo is now preserved
}
使用fat箭头,现在将在JS中编译为:
fooFunction(fooProp:string):void {
// Pretend i set it up properly for $mdDialog to work
this.$mdDialog.show(options).then((answer: boolean) => {
if (answer) {
this.foo = "";
}
});
}
因此,Typescript会自动为您创建一个\u这个变量,这样您就不会再有问题了。如果你问我的话,那就相当不错了
以下是箭头函数的文档:
你是想在方法中声明函数吗?我更新了我的问题,希望它更有意义,我当时正陷入一个愚蠢的境地。是的,我现在明白了,这是Javascript中的一个已知问题。你是想在方法中声明函数吗?我更新了我的问题,希望它更有意义,我当时正在往那里钻一个洞啊,是的,我现在明白了,这在Javascript中是一个众所周知的问题。我知道,所以我们必须避免说谢谢。。但是谢谢,没问题!这些事情令人沮丧。我知道,所以我们不能说谢谢。。但是谢谢,没问题!这些事情令人沮丧。我知道,所以我们不能说谢谢。。但是4.我知道,所以说我们不能说谢谢。。但是谢谢