为什么除了我使用胖箭头定义我的函数之外,我没有构造函数之外的$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
指令。无论如何我更新了我的例子。
答案 0 :(得分:0)
尝试将$scope
定义为控制器类中的属性:
export class SandboxCtrl {
static $inject = ["$scope"];
constructor(private $scope: MyScope) {
}
}
答案 1 :(得分:0)
通过使用bind
将this
绑定到函数,可以解决问题。
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