$ scope vs控制器中的实例变量和方法

时间:2015-12-06 19:27:53

标签: angularjs typescript

我正在使用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)?

1 个答案:

答案 0 :(得分:2)

  

如果我将AngularJS与TypeScript一起使用,最好的方法是不使用$ scope变量和方法,只使用实例变量和方法(使用它)?

100。

关键原因是范围变量容易因角度范围继承机制而断开连接。即使没有TypeScript,也建议不要使用范围变量,这就是创建controller as语法的原因。

有关打字稿中Angular控制器的更多信息:https://www.youtube.com/watch?v=WdtVn_8K17E