Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 相关字段中的角度双向数据绑定_Angularjs_Data Binding - Fatal编程技术网

Angularjs 相关字段中的角度双向数据绑定

Angularjs 相关字段中的角度双向数据绑定,angularjs,data-binding,Angularjs,Data Binding,我需要帮助。我的英语是sry的第一名。 我正在尝试创建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"> $sco

我需要帮助。我的英语是sry的第一名。 我正在尝试创建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">
$scope.model={
a:12,//a=c-b
b:14,//b=c-a
c:null//c=a+b
};
我想计算每个字段在其中一个字段发生更改时的值

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

示例(如我所见):

angular.module('App')。controller('MyCtrl',function($scope){
$scope.model={
项目:[
{id:'另一个字段'},
{id:'a',calculate:'c-b'},
{id'b',calculate'c-a'},
{id:'c',calculate:'a+b'},
{id:'另一个字段'}
]
}
});
角度。模块('App')。指令('calculate',函数(){
返回{
限制:“A”,
链接:函数($scope、$element、$attrs){
//魔法出现在这里:D
}
}
});
{{item.value}}
更新2:


我是为自己做的,下面是一个例子:
可能对smbd有用。它是半抽象的,所以如果smbd将其分叉并使其成为yum,那将很好:D

只需添加所有字段

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

您可以使用angular的$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)

我是为自己做的,下面是一个示例:可能对smbd有用。它是半抽象的,所以如果smbd将其分叉并使用yum,它会很好:D

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

无论何时发生更改,都会触发服务中的函数,并交叉检查服务中的有效性。根据结果在UI中执行任何操作以查看字段


通过这种方式,您可以以直观的方式向用户建议更好的方法…

您的示例不起作用,因为当您尝试将字段“a”更改为“c-b”时,您的观察者会将字段“a”的值计算为“c-b”,尽管对于exm c==0,b==0。。所以你需要分别观察每个字段是的…你可以分别观察a、b和c让我更新答案是的,这样就可以了,sry。。我的错。我的意思是最大的问题是,如果你需要改变控制器的变量。。ofc我们可以在每个变量上使用$watcher。。但是如果我们想动态地添加变量呢。我想知道我们是否可以创建抽象模型。我现在更新问题
$scope.compute = function() {
  //Do your calculation HERE
};
$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;
  }
});