2014-09-30 4 views
1

Мне нужна была помощь. 1-й из моих слов. Im пытается создать 3 поля, которые зависят друг от друга, для ехра:Угловая двусторонняя привязка данных в зависимых полях

$scope.model = { 
    a: 12, // a = c - b 
    b: 14, // b = c - a 
    c: null // c = a + b 
}; 

<input ng-model="model.a"> 
<input ng-model="model.b"> 
<input ng-model="model.c"> 

Я хотел бы, чтобы вычислить значение каждого поля, когда один из них будет изменен

UPDATE 1: Sry, я забыл важную часть проблемы. Как создать абстрактную модель для динамических переменных и зависимостей? Мы можем изменять переменные из контроллеров, так можно ли создать такую ​​вещь? =/

Пример (как я вижу это):

angular.module('App').controller('MyCtrl', function ($scope) { 
    $scope.model = { 
     items: [ 
      {id: 'some another field'}, 
      {id: 'a', calculate: 'c - b'}, 
      {id: 'b', calculate: 'c - a'}, 
      {id: 'c', calculate: 'a + b'}, 
      {id: 'some another field'} 
     ] 
    } 
}); 

angular.module('App').directive('calculate', function() { 
    return { 
     restrict: 'A', 
     link: function ($scope, $element, $attrs) { 
      // The magic appears here :D 
     } 
    } 
}); 

<div ng-controller="MyCtrl"> 
    <div ng-repeat="item in model.items", ng-attr-calculate="item.calculate">{{ item.value }}</div> 
</div> 

UPDATE 2:

Я сделал это для меня, вот пример: https://github.com/grammka/ngTableCalculate Может быть будет полезно для Smbd. Это половина реферировать, так что если Smbd вилка его и сделать ням будет хорошо: D

ответ

0

Я сделал это для меня, вот пример: https://github.com/grammka/ngTableCalculate Может будет быть полезным для smbd. Это частично абстрагировано, поэтому, если smbd развивает его и делает yum, это будет хорошо: D

1

просто добавить на всех полях

<input ng-model="model.a" ng-change="compute()"> 
<input ng-model="model.b" ng-change="compute()"> 
<input ng-model="model.c" ng-change="compute()"> 

и в контроллере определяют

$scope.compute = function() { 
    //Do your calculation HERE 
}; 
+0

Да, это нормально только таким образом, SRY .. мой Плохо. Я имел в виду большую проблему, если вам нужно изменить переменные из контроллера. Ofc мы можем использовать $ watcher для каждой переменной .. но что, если мы хотим динамически добавлять переменные. Я пытаюсь понять, можем ли мы создать абстрактную модель. Я буду обновлять вопрос сейчас – Grammka

0

Вы можете иметь $ watch в коллекции с использованием функции $ watchCollection для углового поиска любых изменений в переменной переменной модели и при необходимости выполнять вычисления.

Код для $ watchCollection:

$scope.$watchCollection("model",function(newValue, oldValue){ 
    if (newValue !== oldValue) { 
    $scope.model.a = $scope.model.c - $scope.model.b; 
    $scope.model.b = $scope.model.c - $scope.model.a; 
    $scope.model.c = $scope.model.a + $scope.model.b; 
    } 
}); 

Working Plunkr

Ссылка для $watchCollection (поиск $ watchCollection в этой странице)

+0

ваш пример не работает, когда вы пытаетесь изменить поле 'a' ur watcher вычислять значение поля 'a' as 'c - b', хотя для exm c == 0, b == 0. так что вам нужно смотреть каждое поле отдельно – Grammka

+0

aah yes ... u может иметь отдельные наблюдатели для a, b и c, чтобы я мог обновить ответ – V31

0

Даже я не уверен, как реализовать для углового одно предложение - отделить поля зрения от логического фактического набора. i.e Храните два разных набора полей для просмотра и логического расчета.

Всякий раз, когда происходит какое-либо изменение, запускается функция в сервисе и перекрестная проверка действительности внутри службы. На основании результатов делать все, что в пользовательском интерфейсе для просмотра полей ...

Таким образом, вы могли бы предложить лучший путь к пользователю в интуитивно понятном способе ...

Смежные вопросы