2016-04-28 15 views
1

以下からわかるように、式の結果を格納して別の入力に再計算する代わりに、式{{ annualIncome * 4.5 }}を1つの入力で計算し、別の入力で再計算します。他の入力として私はそれを行う方法がわかりません。入力にAngularJS式の結果を格納する

例:

%label Equity Loan ({{ selectedLocation.loan }}%): 
%input#equity_loan{ "disabled" => "disabled", "value" => "{{ selectedLocation.mortgage === 55 ? ((annualIncome * 4.5)/11) * 9 : ((annualIncome * 4.5)/15) * 4 }}" } 

%label Mortgage ({{ selectedLocation.mortgage }}%): 
%input#mortgage{ "disabled" => "disabled", "value" => "{{ annualIncome * 4.5 }}" } 

私はNG-モデルを試してみましたが、動作するようには思えません。

また、通貨に値を変更しようとしましたが、式の最後に「| currency」を追加しましたが、これも機能しませんでしたが、それぞれを変換する必要があると思います表現の結果?

+0

有効なHTMLのようには見えません。テンプレートフレームワークを使用していますか? – Patrick

+0

コントローラスコープの値を計算するか、コントローラをコントローラとして直接使用してコントローラに保存することができます。どうやって角張っている?コントローラとアプリケーションをどこで定義していますか? *なぜ*または*どのように動作しないのですか?クラッシュしますか?エラー?何もない? – Patrick

+0

@Patrick私はCodepenに関する完全なプロジェクトを持っています。それはHAMLです - http://codepen.io/wilcode/pen/RajNjE。私はもともと関数に情報を渡してそこで計算しようとしていましたが、関数に変数を渡して結果を別の入力に戻す方法を理解するのに問題がありました。 – lauw0203

答えて

1

まあ、変数を角式で使用することはできませんが、年収変数が変更された後にコントローラで変数を使用できます。これは"ng-model" => "annualIncome"ステートメントを使用して表示されます。

値を変更した後で値を計算するには、自分のスコープで時計を設定することができます。この関数は、値が更新されるたびに呼び出されます。遅延を追加して直ちに計算しない場合は、ng-model-optionsでデバウンスオプションを使用できます。例:

%input{"ng-model-options" => "{debounce: { 'default': 500, 'blur': 0 }}"} 

次に、変数を使用してコードを構造化する単なる方法です。

$scope.$watch('annualIncome', function(value, oldValue) { 
    var annualIncome = value; // same as $scope.annualIncome 
    var parts = selectedLocation.mortgage === 55 ? 11 : 15; 
    var factor = selectedLocation.mortgage === 55 ? 9 : 4; 
    var annualValue = annualIncome * 4.5; 
    $scope.result = { 
    propertyValue: annualValue + (annualValue/parts) + ((annualValue/parts) * factor), 
    deposit: annualValue/parts 
    // and so on.. 
    }; 
}); 

結果変数はスコープに設定されているので、プロパティバインディングを使用してビューでバインドすることができます。

%input#property_value{ "disabled" => "disabled", "value" => "{{ result.propertyValue }}" }