2016-08-03 11 views
1

私は、3つの変数abとtestvar、testvarはaとbの和です、私は簡単なサンプルコードを持っています。そのモデルをaとして入力を作成しました。 abの初期値を使用して、Angularjsバインドの問題

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

バインドa + btestvarに一度だけ:これを達成することができるどのように、すべてのヘルプは大

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

このラインを高く評価しています。

一つの解決策は、このように、関数にtestvarを有効にすることです:

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

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

お使いのコントローラが初めてtestvarのために実行されている場合ので、あなたがmymodel.amymodel.bを変更したとき、あなたのmymodel.testvar更新を取得していない理由は、 abの初期値の合計になるため、testvarは3に等しいので、変数testvarはリテラル値3を格納します。aまたはbを4としましょう - testvarを評価する。 testvarはまだ3です。testvarmymodel.testvar = function(){ return mymodel.a + mymodel.b};のような関数に入れなおす必要がある場合、このようなシナリオでは、関数呼び出しにバインドします。または角であなたは直接追加式にバインドすることができます{{mymodel.a + mymodel.b}}

+0

ありがとう!きちんとした説明 – PortalGuy

関連する問題