【问题标题】:AngularJS binding not updating modelAngularJS绑定不更新模型
【发布时间】:2017-12-29 08:39:38
【问题描述】:

我最近开始探索 AngularJS。我看到了一些类似的问题,但我很确定这里没有任何范围问题。 (或者我对范围的理解不清楚。)

JS代码:

var app = angular.module("myApp", []);
app.controller("myController", function($scope){
$scope.b=50000
$scope.apr=10
$scope.hc=$scope.b/$scope.apr
...
})

HTML:

<div ng-app="myApp" ng-controller="myController">
<span class="inp-heading">b:</span>
<input ng-model="b" type="number" step="1000" min="0" />
<input ng-model="apr" type="number" step="1" min="0" />
{{b}} <br /> <!-- this updates on input value change -->
{{hc}} <br /> <!-- this does NOT update on input value change -->
{{b/apr}} <br /> <!-- this updates on input value change -->

正如 cmets 中提到的(在上面的 HTML 代码中),$scope.hc 不会改变。实际上这不是唯一的问题,我在将数组值绑定到输入框时也遇到了类似的问题。

任何帮助将不胜感激。

【问题讨论】:

  • 如果您在投票前发表评论会很棒。

标签: javascript angularjs angularjs-ng-model


【解决方案1】:

由于只是更改某些模型时不会重新调用控制器功能,因此不会重新计算$scope.hc的值。您需要在渲染之前手动更新它或以某种方式获取重新计算的值。几种方法。

1。 ngChange 指令

使用ngChange 指令(一种onchange 事件)来更新$scope.hc 值:

var app = angular.module("myApp", []);
app.controller("myController", function($scope){
  $scope.b = 50000
  $scope.apr = 10
  $scope.hc = $scope.b/$scope.apr

  $scope.onChange = function () {
    $scope.hc = $scope.b/$scope.apr
  }
})

HTML

<input ng-model="b" ng-change="onChange()" type="number" step="1000" min="0" />
<input ng-model="apr" ng-change="onChange()" type="number" step="1" min="0" />

2。使用 getter

defining hc 作为 $scope 对象的属性时,您可以在这里使用旧的黄金 ES5 属性获取器:

var app = angular.module("myApp", []);
app.controller("myController", function($scope){
  $scope.b = 50000
  $scope.apr = 10

  Object.defineProperty($scope, 'hc', {
    get: function () {
      return $scope.b/$scope.apr
    }
  })
})

在这种情况下 HTML 不会改变。

【讨论】:

    【解决方案2】:

    您的hc 不会自动更新,如果需要,它应该是类似的函数

    var app = angular.module("myApp", []);
    app.controller("myController", function($scope){
      $scope.b=50000
      $scope.apr=10
      $scope.hc= function() { return $scope.b/$scope.apr; };
      ...
    })
    

    然后在你的部分应该是(而不是hc,它将是hc()

    <div ng-app="myApp" ng-controller="myController">
    <span class="inp-heading">b:</span>
    <input ng-model="b" type="number" step="1000" min="0" />
    <input ng-model="apr" type="number" step="1" min="0" />
    {{b}} <br /> 
    {{hc()}} <br /> 
    {{b/apr}} <br /> 
    

    【讨论】:

    • 为什么值改变时表达式没有自动更新?
    • bcoz 作用域值hc 是从b 和apr 的值初始化的,值是为hc 存储的表达式,而不是表达式
    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多