依赖字段中的角度双向数据绑定

时间:2014-09-30 09:04:41

标签: angularjs data-binding

我需要帮助。我的英语第一。 我试图创建3个相互依赖的字段,对于exp:

$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">

当其中一个字段发生变化时,我想计算每个字段的值

更新1: 我忘了这个问题的重要部分。如何为动态变量和依赖项创建抽象模型?我们可以从控制器中更改变量,因此可以创建这样的东西吗? = /

示例(我看到这个):

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>

更新2:

我为我做了,这是例子:https://github.com/grammka/ngTableCalculate 也许对smbd有用。它是一半抽象的,所以如果smbd将它分叉并使它成为yum它会很好:D

4 个答案:

答案 0 :(得分: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
};

答案 1 :(得分:0)

您可以使用$ watchCollection函数对集合进行$ watch,以查找范围变量模型中的任何更改,并根据需要进行计算。

$ 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)

答案 2 :(得分:0)

我为我做了,这是例子:https://github.com/grammka/ngTableCalculate也许对smbd有用。它被抽象了一半,所以如果smbd将它分叉并使它成为yum它会很好:D

答案 3 :(得分:0)

即使我不确定如何实现角度,一个建议是将视图字段与逻辑实际集合分开。即为视图和逻辑计算保留两组不同的字段。

每当发生更改时触发服务中的功能并交叉检查服务内部的有效性。根据结果​​在UI中执行任何操作以查看字段...

这样,您可以以直观的方式向用户建议更好的方式......