我可以使用 "this" 访问范围对象本身的属性吗?

Can I access properties of a scope object within itself using "this"?

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

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

为什么这行不通?它说 this 未定义。有没有办法实现这一点而不必写出 total: $scope.fees.basic + $scope.fees.premium.

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

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

为什么 this.basic 不起作用

this 在包含此语句的函数的上下文中计算。所以 this 不是指 $scope.fees 对象,而是指控制器。

为什么 total : $scope.fees.basic + $scope.fees.premium 也不起作用

在计算表达式 $scope.fees.basic + $scope.fees.premium 时,$scope.fees 对象尚不存在,因为您正在创建它。因此它会导致像 "Cannot read property basic of undefined" 这样的错误。

如何解决这个问题

除了您已经找到的解决方案之外,没有任何其他解决方案会导致您想要的行为,因此很遗憾,您将不得不坚持下去。

您可以考虑使用 "controller as class" 模式来减少您对 $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/

你可以使用函数..

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

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

};

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

}