我有一个简单的示例代码,由3个变量ab和testvar组成,testvar是a和b的总和,我试图理解为什么绑定对变量testvar不起作用,当a的值发生变化时,我创建了一个输入其模型为。如何实现这一点,非常感谢任何帮助
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<input ng-model="mymodel.a"><br>
Why this value does ot change on changing input:{{ mymodel.testvar}}
<br>
mymodel.a changes on input change: {{mymodel.a}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.mymodel={};
$scope.mymodel.a=1;
$scope.mymodel.b=2
$scope.mymodel.testvar =$scope.mymodel.a+$scope.mymodel.b;
});
</script>
<p>Test Binding.</p>
</body>
</html>
答案 0 :(得分:1)
这一行:
$scope.mymodel.testvar =$scope.mymodel.a+$scope.mymodel.b;
使用a + b
和testvar
的初始值,只将a
绑定到b
一次。
一种解决方案是将testvar
转换为函数,如下所示:
// Javascript
$scope.getTestVar = function() {
return $scope.mymodel.a+$scope.mymodel.b;
};
<!-- HTML -->
TestVar: {{getTestVar()}}
答案 1 :(得分:1)
更改mymodel.testvar
或mymodel.a
时mymodel.b
未获得更新的原因是因为当您的控制器第一次运行时testvar
被评估为总和a
和b
的初始值因此testvar
等于3.因此变量testvar
存储字面值3.现在当您更改{{ 1}}或a
让4说你没有重新评估b
。 testvar
仍然是3.在这种情况下,如果您想重新计算testvar
必须将其放入像testvar
这样的函数中,那么您将绑定到函数调用。或者在角度中,您可以直接绑定到加法表达式,例如mymodel.testvar = function(){ return mymodel.a + mymodel.b};