【问题标题】:updating ng-model from ng-value directive从 ng-value 指令更新 ng-model
【发布时间】:2014-12-28 11:15:06
【问题描述】:

我有一种情况,我的表单中有几个只读字段,就像其他人一样显示问题

您可以看到最后两个输入是readonly,它们是计算输入,其中总借方由$scope 上的totalDebit 函数计算,总贷方由$scope 上的totalCredit() 函数计算。问题是输入仅反映 ng-model 值,这两个输入都为零,并且不从计算函数中获取值。一个简化的控制器是

app.controller('myController', ['$scope' ,function($scope){
$scope.credit = 0;
$scope.debit = 0;
$scope.debitSum = 0;
$scope.creditSum = 0;

$scope.totalCredit = function(){
   return $scope.credit + 200; //just to show that it is calculated field
}

$scope.totalDebit = function(){
   return $scope.debit + 200; //just to show that it is calculated field
}

}]);

如果您从只读输入中删除 ng-model 指令,它们将分别采用 totalDebittotalCredit 函数中的值。但我希望他们使用函数中的值并更新totalDebittotalCredit$scope 属性。这是此代码的plunker

【问题讨论】:

    标签: angularjs angular-ngmodel


    【解决方案1】:

    不应该在这里回答 (为什么 ng-value 没有达到预期的效果)

    ngValue

    将给定的表达式绑定到 <option>input[radio] 的值,这样当元素被选中时,该元素的 ngModel 被设置为绑定值。

    这不是我们的情况......

    因为,ngValue 在 CHANGE 时触发。当我们在<select>中选择radio或某个选项时

    因此,ng-value 在这种情况下不是正确的设置。

    我们可以这样调整:

    <input name="totalDebit" value="{{totalDebit()}}" readonly="" />
    <input name="totalCredit" value="{{totalCredit()}}" readonly="" />
    

    updated plunker

    【讨论】:

    • 是的,我读到了。您应该将什么用于只读输入? ng-model 抛出异常。
    • 在我的扩展答案中可以看到一种方法
    • @RadimKöhler 您的答案将精确显示只读输入中的计算值,但不会将其绑定到范围上的任何属性。我也需要这个
    • 就是这样。如果我们需要一些计算,我们必须观察其中包含的部分。这就是value="{{totalDebit()}}" 所做的。它正在观察所有部分,直到结果“稳定”,它的值不会改变,它正在重新调用。这意味着,该方法的那部分可能会将结果设置为$scope.creditSum = ...。而已。事实上,这将在后台使用$scope.$watch() 解决。 View 只是为我们分配了那个手表。希望对您有所帮助;)祝 Angular 好运
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多