2017-03-05 44 views
0

的输入框更改数组长度我有一个包含对象的数组。我想从类型数字的输入框中更改此数组中的对象数。所以每次输入框中的数字都增加了,我增加了长度,减少了相同的数字。我还想推送一个默认对象或弹出最后一个对象,具体取决于数组的增加还是减少。这是我目前的代码。从类型号为

// html 
<input type="number" class="form-control" min="0" max="12" ng-click ="topEntriesSelectOffense()" ng-value="page.offense.topRow.length"> 

//my controller 
$scope.topEntriesSelectOffense = function() { 
    // push if number is increased 
    $scope.page.offense.topRow.push({ 
     "1": { 
      "firstName": "FirstName", 
      "lastName": "LastName", 
      "headshot": "file/path" 
     }, 
     "2": { 
      "firstName": "FirstName", 
      "lastName": "LastName", 
      "headshot": "file/path" 
     }, 
     "3": { 
      "firstName": "FirstName", 
      "lastName": "LastName", 
      "headshot": "file/path" 
     }, 
     "position": "POS" 
    }); 
    // pop if the number is reduced 
    $scope.page.offense.topRow.pop(); 
} 

问题是我不能真正知道当用户减少数量,我不太确定如何检测值增加或减少。如果我使用ng-model作为page.offense.topRow.length,我会得到一个在最后一个索引处没有对象的数组,因为它会增加长度,然后推动对象在数组中留下空隙。该数组看起来像这个数组= [1,3]。谢谢!

回答

0

我们假设你有2个函数,createObj()来创建对象,destroyObj()来销毁数组中的对象。

现在你说你需要根据输入中的变量添加/减去对象。

在这种情况下,我会坚持读取angularjs的$watch函数。 你可以在这里做的是你可以有2个变量,即oldvar和newVar,并根据需要多次比较和调用所需的函数。例如,如果初始值为10,用户将其设为7,则可以调用destroy()函数3次。

下面是$watch功能

doc link下面是stackoverfllow另一个有用link给的如何使用它的一个简单的例子。

+0

我喜欢使用$ watch函数的想法,我一直试图让watch函数工作,但似乎并没有在每次输入框被改变的时候被解雇,这里是我的代码'$ scope。$看( 'topEntriesOffense',函数(NEWVALUE,属性oldValue){ 如果(NEWVALUE>属性oldValue){ topEntriesOffenseAdd();} } );' – inhaler

+0

我需要,以帮助你更新的代码。 – Sagar

+0

感谢所有的帮助,我使用了ng-change作为Soviut的建议,当它改变时,我根据模型的当前值调用函数creatObj()和destroyObj(),就像你建议的那样。我将旧值保存在一个范围变量中,并通过调用this.value在函数中检索当前值。我无法让手表正常工作。但这种方式工作得很好。感谢所有的帮助! – inhaler

0

您应该在号码字段使用ng-change而不是ng-click。这将确保即使在使用键盘输入或复制/粘贴时也会触发事件。

然后,在您的更改处理程序函数中,只需询问当前值并使用数组splice()函数来增大或缩小数组。