I'm just starting to create a small project with AngularJS.
Due to structural reasons, I'd like to decompose my model in several sub models like so:
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}
    ];
}
Suppose, that the outcome of subModel1 and subModel2 is essential a sum of their item-values.
Thus, the sum of subModel1 is 4 and the sum of subModel2 is 10.
How do I bind programmatically mainModel[0].sum to the sum of subModel1 and likewise for subModel2?
Update: Just found AngularJS Fundamentals in 60-ish Minutes by Dan Wahlin. A beautiful introduction, which focusses on core concepts.
If you only need the value in your view, you can define a function on $scope:
$scope.mainSum = function() {
    return $scope.subModel1[0].value + $scope.subModel2[0].value;
}
and then use it in your view:
<div>main sum = {{mainSum()}}</div>
If you need mainModel to be updated, do what @Tim already suggested in a comment -- use $watches in your controller:
$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;
});
Or you can watch the sum:
$scope.$watch(function() {
    return $scope.subModel1[0].value + $scope.subModel2[0].value;
 }, function(value) {
    $scope.mainSum[0].sum = value;
});
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With