2016-06-17 38 views
0

比方说,我们有2个输入框:如何在两个输入框中的任意一个输入框中有输入时自动将输入框的值设置为相反的数字?

  1. NUM1
  2. NUM2

当用户在任何2名输入框中输入一个数字,我们希望发生的自动设置另一个输入框的值与数字的相反符号相关联。

实例:

  • 用户输入1中NUM1。 num2的值应自动设置为 为-1。
  • 用户在num1中输入-1。 num2的值应自动设置为 为1.

使用AngularJS 1.x时,我们该如何实现这一点?

回答

4

有几个方法可以做到这一点:

  1. 在你的控制器派人监视NUM1和NUM2的值。它可能是这个样子(假设$范围在你的控制器注入)

例HTML

<input type="number" ng-model="num1"> 
<input type="number" ng-model="num2"> 

例JS

$scope.$watch('num1', function(newVal){ 
    $scope.num2 = - newVal; 
} 

$scope.$watch('num2', function(newVal){ 
    $scope.num1 = - newVal; 
} 

这种方式是最好,如果你打算重用控制器具有多个视图,或者模型数据(num1和num2)之间存在固有关系。如果因为任何原因(其他绑定,javascript显式更改等)发生更改,手表将触发。

  • 在您的输入有一个NG-变化的角度表达式中设置的值,如果你
  • 例HTML

    <input type="number" ng-model="num1" ng-change="num2=-num1"> 
    <input type="number" ng-model="num2" ng-change="num1=-num2"> 
    

    这种方式是优选的只关心一个数字,或者这个逻辑只属于视图。它也可以更高效,因为它钩住了变化事件而不是做和等价检查每个摘要循环。但是,这意味着如果通过除了改变该输入框之外的其他方式来改变其中一个数字,则该改变将不会被反映。感谢Manatax在下面的评论中指出了大部分好处。

    +2

    第二个例子将是一个正确和有效的方法来处理所问的问题。 – Manatax

    +2

    @Manatax在我看来,两种方式都是正确的。虽然在大多数情况下,我还会倾向于采用第二种方法,哪种方法(并且更为正确)取决于建模数据,以及关系是否应专门存在于视图中,还是反映了数据的性质。鉴于这个问题没有提供上下文(这很好),我认为这两种方式都值得一提。 – stygma

    +1

    我同意,只是在事件改变时才会调用ng-change,但是不断评估watch。如果你使用函数调用而不是表达式,并在控制器上进行数据建模,那么这将是正确的,并且更加高效。 – Manatax

    相关问题