2016-08-03 102 views
1

我有一個簡單的示例代碼,由3個變量ab和testvar組成,testvar是a和b的總和,我試圖理解爲什麼綁定對變量testvar無效,已經創建了一個模型的輸入。如何可以做到這一點,任何幫助是極大的讚賞Angularjs綁定問題

<!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> 

回答

1

這條線:

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

綁定a + btestvar只有一次,使用的ab的初始值。

一種解決方案是把testvar到一個函數,就像這樣:

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

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

的原因,你的mymodel.testvar當您更改mymodel.amymodel.b是因爲當你的控制器運行首次testvar沒有得到更新被評估爲ab的初始值的總和,因此testvar等於3.因此變量testvar存儲文字值3.現在當您更改ab讓我們假設4您不是 - 評估testvartestvar仍然是3.在這種情況下,如果您想重新計算testvar必須將其放入mymodel.testvar = function(){ return mymodel.a + mymodel.b};之類的函數中,則您將綁定到函數調用。或者在角度上,您可以直接綁定到加法表達式,如{{mymodel.a + mymodel.b}}

+0

謝謝!簡潔的說明 – PortalGuy