Angular和Typescript:引用'this'的正确方法

时间:2016-05-27 13:47:20

标签: angularjs typescript controller

我在角项目中设置打字稿。为了声明控制器,我使用以下语法:

module app {

    class MyController {
        public myvar: boolean;

        constructor() {
            this.myvar= false;
        }
    }
    angular.module("app").controller("MainController", [MainController]);
}

请注意我没有注入范围,我只使用控制器的内部属性/方法。 但我不喜欢使用'this'访问属性,通常我应该声明:

var vm = this.
vm.myvar = ...

然而这很烦人,因为我有很多方法;我应该在任何一个中声明这一点,这是重复的。

是否有最佳做法和/或模式,才能宣布'vm'一次?

1 个答案:

答案 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();
}