我如何在打字稿构造函数之外正确使用angular $ timeout服务?

XT_*_*ova 5 angularjs typescript

我正在试图找出如何正确使用TypeScript的角度$ timeout服务 - 这样当有人点击"登录"按钮时,我可以显示类似于闪屏的行为.

interface INavigationController {
        username: string;
        password: string;
        loggedIn: boolean;
        ready: boolean;
        signIn(): void;
        signOut(): void;
    }

    class NavigationController implements INavigationController {
        username: string;
        password: string;
        loggedIn: boolean;
        ready: boolean;

        static $inject = ['$timeout'];
        constructor(private $timeout: ng.ITimeoutService) {
            var vm = this;
            vm.username = this.username;
            vm.password = this.password;
            vm.ready = true;

            // The line below work just fine from within here - but i want the behavior
            // when someone clicks a button, not directly like this.
            // Remove vm.ready = true above, before...
            //$timeout(function () { vm.ready = true;}, 2200);}

        signIn() {
            if (!this.username || !this.password) {
                alert("You need to frickin enter som details, man!");
            } else {
                this.ready = false;
                this.$timeout(function () {
                    this.ready = true;
                }, 2200);
            }
        }
Run Code Online (Sandbox Code Playgroud)

我也尝试将其设置invokeApply?:boolean为true:

this.$timeout(function () {
    this.ready = true;
}, 2200, true);
Run Code Online (Sandbox Code Playgroud)

- 没有任何成功......

如果我console.log(this.ready);this.$timeout(function()...它内部将显示我true2200ms后,但它似乎$apply()不适用?

如果有人可以启发我如何正确使用$ timeout和其他类似的服务,我将不胜感激 - 最好使用样式指南我的目标是使用"controllerAs with vm" - John Papa

luj*_*con 6

this.$timeout(()=> {
                this.ready = true;
            }, 2200);
Run Code Online (Sandbox Code Playgroud)

如果你使用function(){}模式你没有访问权限this(this不是你期望的那个)