2013-12-13 1 views
1

У меня есть два набора входов, каждый из которых привязан к значениям в массивах. Каждый массив создает ребра сетки, пересечения сетки будут представлять собой некоторый расчет двух входов, которые определяют пересечение. Скажем, aArr - это строки, а bArr - столбцы.Создайте массив вычисляемых значений, привязанных к другим входам в AngularJS

$scope.aArr = [{val: 1},{val: 1},{val: 1}]; 
$scope.bArr = [{val: 1},{val: 1},{val: 1}]; 

Может ли я создать массив пересечений, где каждое обновление пересечения, когда каждое определяющее значением является обновлением, а затем использовать этот массив с нг-повтором, чтобы создать разметку?

Что-то вроде

$scope.intersections = [{val: $scope.aArr[0].val + $scope.bArr[0]}...] 

дает мне перекрестки, которые не обновляют и всякий раз, когда я пытаюсь определить interection [п] .val как функции я получаю ошибки.

Редактировать

Кажется, я могу определить

$scope.intersections = [ 
    [function(){return $scope.aArr[0] + $scope.bArr[0]}, function(){return $scope.aArr[0] +   $scope.bArr[1]} ... ], 
    [...], 
    [...] 
]; 

Но я не могу определить пустой массив затем заполнить его программно. Firebug бросает то, что выглядит как Error:[$interpolate:interr] ...

Любые мысли?

ответ

3

Если вам нужны некоторые вычисления при изменении объекта или значения объекта, используйте функцию WATCH.

Смотрите эту скрипку для примера: http://jsfiddle.net/imhassan66/x6QaY/

В этом примере я добавляю 1-ое значение обоих массивов. Если вы измените эти значения, он обновит SUM.

app.controller('MainCtrl', function ($scope) { 

$scope.aArr = [{ 
     val: 1 
    }, { 
     val: 2 
    }]; 

    $scope.bArr = [{ 
     val: 3 
    }, { 
     val: 43 
    }]; 

    $scope.$watch("aArr", function() { 
     $scope.doWorkInArrayChange(); 
    }, true); 

    $scope.$watch("bArr", function() { 
     $scope.doWorkInArrayChange(); 
    }, true); 

    $scope.sum = ""; 
    $scope.doWorkInArrayChange = function() { 
     $scope.sum = parseInt($scope.aArr[0].val) + parseInt($scope.bArr[0].val); 
    }; 
Смежные вопросы