2016-04-28 52 views
1

正如您從下面看到的那樣,我正在計算一個輸入中的表達式{{ annualIncome * 4.5 }},並在另一個輸入中重新計算相同的表達式,而不是存儲表達式的結果並將其傳遞給其他投入,因爲我不確定如何做到這一點。在輸入中存儲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 }}" }