我可以使用“this”访问自身范围内的属性吗?

时间:2015-05-12 19:59:50

标签: javascript angularjs object scope this

我需要得到以下示例的总数:

$scope.fees = {
    basic: 1,
    premium: 2,
    total: this.basic + this.premium
}

为什么这不起作用?它说this未定义。有没有办法实现这一点,而无需写出total: $scope.fees.basic + $scope.fees.premium

如果有办法缩短它,我会很高兴。

编辑:我实际上必须在total之外添加$scope.fees属性。 $scope.fees.total = ...

3 个答案:

答案 0 :(得分:2)

您可以使用功能..

        您好{{total()}}     
function FeeController($scope) {

    $scope.fees = {
    basic: 1,
    premium: 2,

};

  $scope.total = function() {
    return $scope.fees.basic  + $scope.fees.premium;
  };

}

答案 1 :(得分:1)

为什么this.basic无效

this在包含此语句的函数的上下文中进行计算。因此this不会引用$scope.fees对象,而是引用控制器。

为什么total : $scope.fees.basic + $scope.fees.premium无法正常工作

在评估表达式$scope.fees.basic + $scope.fees.premium时,$scope.fees对象尚未存在,因为您正在创建它。因此,它将导致类似"无法读取undefined"的基本属性的错误。

如何解决此问题

除了您已发现的导致您想要的行为之外,没有任何解决方案,所以不幸的是您必须坚持使用它。

答案 2 :(得分:0)

您可以考虑将"控制器用作类"模式减少了你对$ scope的依赖。你可以这样做:

app.controller('FeeCtrl', function () {
  this.basic =1;
  this.premium =2;
  this.total = this.basic + this.premium;
});

然后你可以将这个控制器注入你的dom:

<div ng-controller="FeeCtrl as fee">   
 {{ fee.total }} 
</div>

这里有更详细的说明

<强> http://toddmotto.com/digging-into-angulars-controller-as-syntax/