我正在使用TypeScript重写我的AngularJS应用程序。在我的应用程序中,我使用$ scope来定义变量和方法:
defectResource.defectByDefectId($scope.defectid).then(function (data) {
$scope.defect = data;
});
$scope.postDefect = function () {
defectResource.postDefect($scope.defect).then(function () {
$location.path('defects/' + $stateParams.itemid);
});
};
我可以改写我的控制器:
interface IDefectDetailModel {
}
class DefectDetailController implements IDefectDetailModel {
static $inject = ['$scope', '$stateParams', '$location', 'defectResource', 'entityProvider'];
constructor($scope: any, $stateParams: any, $location: any, defectResource: any, entityProvider: any) {
defectResource.defectByDefectId($scope.defectid).then(function (data) {
$scope.defect = data;
});
$scope.postDefect = function () {
defectResource.postDefect($scope.defect).then(function () {
$location.path('defects/' + $stateParams.itemid);
});
};
}
}
但如果我理解正确,这不是好方法。我需要创建将实现此接口的Interface和TypeScript类。我的所有变量都必须是类变量(因此$scope.defectid
必须是this.defectid
),所有$scope
方法都必须是类方法(this.postDefect()
)。
我理解正确吗?如果我将AngularJS与TypeScript一起使用,最好的方法是不使用$scope
变量和方法,只使用实例变量和方法(使用this
)?
答案 0 :(得分:2)
如果我将AngularJS与TypeScript一起使用,最好的方法是不使用$ scope变量和方法,只使用实例变量和方法(使用它)?
100。
关键原因是范围变量容易因角度范围继承机制而断开连接。即使没有TypeScript,也建议不要使用范围变量,这就是创建controller as
语法的原因。
有关打字稿中Angular控制器的更多信息:https://www.youtube.com/watch?v=WdtVn_8K17E