我需要得到以下示例的总数:
$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 = ...
答案 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/ 强>