将模型属性直接绑定到AngularJS中另一个模型的计算属性?

时间:2013-04-27 14:13:27

标签: javascript angularjs

我刚刚开始使用AngularJS创建一个小项目。

由于结构原因,我想在几个子模型中分解我的模型,如下:

var myCtrl = function ($scope) {

    $scope.mainModel = [
        {modelTitle:'learn angular', sum:0},
        {modelTitel:'build an angular app', sum:0}
    ];

    $scope.subModel1 = [
        {item:'learn angular', value:2},
        {item:'build an angular app', value:2}
    ];

    $scope.subModel2 = [
        {item:'learn angular', value:5},
        {item:'build an angular app', value:5}
    ];

}

假设subModel1subModel2的结果必须是其商品价值的总和。

因此,subModel1的总和为4,subModel2的总和为10.

如何以编程方式将mainModel[0].sum绑定到subModel1的总和,同样为subModel2绑定?

更新:刚刚AngularJS Fundamentals in 60-ish Minutes找到了Dan Wahlin。一个美丽的介绍,专注于核心概念。

1 个答案:

答案 0 :(得分:15)

如果您只需要视图中的值,则可以在$ scope上定义一个函数:

$scope.mainSum = function() {
    return $scope.subModel1[0].value + $scope.subModel2[0].value;
}

然后在您的视图中使用它:

<div>main sum = {{mainSum()}}</div>

如果您需要更新mainModel,请执行@Tim在评论中建议的内容 - 在您的控制器中使用$watch es:

$scope.$watch('subModel1[0].value', function(value) {
    $scope.mainSum[0].sum = value + $scope.subModel2[0].value;
});
$scope.$watch('subModel2[0].value', function(value) {
    $scope.mainSum[0].sum = $scope.subModel1[0].value + value;
});

或者你可以看一下总和:

$scope.$watch(function() {
    return $scope.subModel1[0].value + $scope.subModel2[0].value;
 }, function(value) {
    $scope.mainSum[0].sum = value;
});