通过为json对象命名,将计算出的ng-model添加到json对象中

时间:2017-01-09 14:45:02

标签: angularjs json

我有一个奇怪的问题......

在我看来,我有那个

<td>
    <input ng-model="ca_mta_drive_min()"
           class="form-control"
           placeholder="Exemple : 2 500 000"
           ui-money-mask="0"
           disabled>
    </input>
</td>

在我的控制器中,值的计算如下:

$scope.ca_mta_drive_min = function() {
    return $scope.etude.ca_pdm_d_mini
        * $scope.etude.foyer_zone
        * ((parseInt($scope.etude.ca_eomini) + parseInt($scope.etude.ca_eomaxi)) / 2)
        * $scope.etude.achat_internet
        * $scope.etude.ca_coefficient;
}

它工作得非常好,但问题是我必须使用计算值ca_mta_drive_min更新json对象练习曲...不知道你是否明白我的意思,我需要将它发送到后端

让你明白;我需要我的观点做那样的事情(注意它的价值,而不是功能:

<td>
    <input ng-model="ca_mta_drive_min"
           class="form-control"
           placeholder="Exemple : 2 500 000"
           ui-money-mask="0"
           disabled>
    </input>
</td>

因为我的对象练习曲中有很多东西,但我不知道如何将计算值输入其中?我尝试过改变,但这不是真正的问题。

最后,我用$ http将etude对象发送到后端,但是我怎么能将计算出的值推入名为“etude”的json中呢?

我不想在使用$ http发送之前回忆每个函数,我可能想要一个链接到我的HTML INPUT的“额外ng-model”,它会自动更新。

1 个答案:

答案 0 :(得分:0)

首先,您需要了解如果使用函数作为ng模型,则需要使用ng-model-options="{ getterSetter:true }"。这样,angular知道调用getter / setter函数。该函数的签名也需遵循以下约定:

的getter / setter

var _privateVar = ...
$scope.getterSetterFunc = function( val ){ 
    if( val ) _privateVar = val
    else return _privateVar
}

......沿着这些方向发展。 &#34; gotchya&#34;如果您试图影响在getter / setter中计算值的形式,则可以触发另一个调用该函数的摘要循环,该函数会计算另一个值,从而创建无限的摘要循环。希望Angular会抱怨这一点并带着错误将你踢出循环。

ng-model-options docs - https://docs.angularjs.org/api/ng/directive/ngModelOptions#arguments

保持简单

最好为ng-model添加正常的var,然后使用ng-change在控制器上调用计算函数。您可能还想在那里添加一些逻辑以防止在模型未发生变化的情况下进行计算。我不确定角度通过ng-change提供什么样的安全性,但我猜如果你有模型值改变,然后在摘要周期中翻转回其原始值,它仍然会启动更改