我在角项目中设置打字稿。为了声明控制器,我使用以下语法:
module app {
class MyController {
public myvar: boolean;
constructor() {
this.myvar= false;
}
}
angular.module("app").controller("MainController", [MainController]);
}
请注意我没有注入范围,我只使用控制器的内部属性/方法。 但我不喜欢使用'this'访问属性,通常我应该声明:
var vm = this.
vm.myvar = ...
然而这很烦人,因为我有很多方法;我应该在任何一个中声明这一点,这是重复的。
是否有最佳做法和/或模式,才能宣布'vm'一次?
答案 0 :(得分:1)
但我不喜欢使用'this'访问属性,通常我应该声明
var vm = this
...是否有最佳做法和/或模式,以便仅声明'vm'一次?
这是放弃这种做法的好时机。在TypeScript中,很容易使用this
而不是将this
赋给变量 - 它已经为你定义了,所以很高兴使用它。
执行此操作时的关键是使用箭头函数来确保始终使用类实例的this
而不是this
绑定到常规函数表达式。
class MyController {
myVar = false;
someOtherMethod() {
// good
functionWithCallback(() => {
// this will be the class instance
console.log(this.myVar);
});
// bad
functionWithCallback(function() {
// this will not be the class instance
console.log(this.myVar);
});
// good
functionWithCallback(() => this.myOtherMethod());
// bad, `this` in myOtherMethod is not the class instance
functionWithCallback(this.myOtherMethod);
}
myOtherMethod() {
console.log(this.myVar);
}
}
function functionWithCallback(callback: Function) {
callback();
}