Typescript / AngularJS:$ scope undefined在构造函数之外

时间:2016-05-30 13:57:42

标签: angularjs typescript angularjs-scope

为什么除了我使用胖箭头定义我的函数之外,我没有构造函数之外的$scope的范围?或者是否可以在不使用胖箭头定义函数的情况下访问$ scope?

namespace FooBar {
    export interface MyScope extends ng.IScope {
        message: string;
    }

    export class SandboxCtrl {
        static $inject = ["$scope", "$timeout"];
        private scope: MyScope;
        private timeout: ITimeoutService;
        constructor($scope: MyScope, $timeout: ng.ITimeoutService) {
            this.scope = $scope;
            this.timeout = $timeout;
            timeout(this.foo, 1000); // does not work
            timeout(this.bar, 1000); // works
        }

        public foo() {
            this.scope.message = "foo bar"; // does not work
        }

        bar = () => {
            this.scope.message = "foo bar"; // works
        }
    }
}

更新我注意到我没有分享整个问题,因为我不知道是因为导致问题的$timeout指令。无论如何我更新了我的例子。

3 个答案:

答案 0 :(得分:0)

尝试将$scope定义为控制器类中的属性:

    export class SandboxCtrl {
        static $inject = ["$scope"];
        constructor(private $scope: MyScope) {

        }
    }

答案 1 :(得分:0)

通过使用bindthis绑定到函数,可以解决问题。

timeout(this.foo.bind(this), 1000);

答案 2 :(得分:0)

  

超时(this.foo,1000); //不起作用

这是因为null是一个未绑定的函数,var result = from a in db.table.Where(x => x.type == "dataSet") join b in db.table.Where(x => x.type == "backupSet") on new { a.name, a.date } equals new { b.name, b.date } into bGroup from b in bGroup.DefaultIfEmpty() where b == null select new DataObject { ... }; 的值将由调用者驱动。

只需使用箭头功能

更多

此处包含https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html