Angularjs Bind问题

时间:2016-08-03 20:44:12

标签: angularjs binding

我有一个简单的示例代码,由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>

2 个答案:

答案 0 :(得分:1)

这一行:

$scope.mymodel.testvar =$scope.mymodel.a+$scope.mymodel.b;

使用a + btestvar的初始值,只将a绑定到b一次。

一种解决方案是将testvar转换为函数,如下所示:

// Javascript
$scope.getTestVar = function() {
    return $scope.mymodel.a+$scope.mymodel.b;
};

<!-- HTML -->
TestVar: {{getTestVar()}}

答案 1 :(得分:1)

更改mymodel.testvarmymodel.amymodel.b未获得更新的原因是因为当您的控制器第一次运行时testvar被评估为总和ab的初始值因此testvar等于3.因此变量testvar存储字面值3.现在当您更改{{ 1}}或a让4说你没有重新评估btestvar仍然是3.在这种情况下,如果您想重新计算testvar必须将其放入像testvar这样的函数中,那么您将绑定到函数调用。或者在角度中,您可以直接绑定到加法表达式,例如mymodel.testvar = function(){ return mymodel.a + mymodel.b};