我需要帮助。我的英语第一。 我试图创建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
答案 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;
}
});
$watchCollection的参考(在此页面中搜索$ watchCollection)
答案 2 :(得分:0)
我为我做了,这是例子:https://github.com/grammka/ngTableCalculate也许对smbd有用。它被抽象了一半,所以如果smbd将它分叉并使它成为yum它会很好:D
答案 3 :(得分:0)
即使我不确定如何实现角度,一个建议是将视图字段与逻辑实际集合分开。即为视图和逻辑计算保留两组不同的字段。
每当发生更改时触发服务中的功能并交叉检查服务内部的有效性。根据结果在UI中执行任何操作以查看字段...
这样,您可以以直观的方式向用户建议更好的方式......