从类型为数字的输入框更改数组长度

时间:2017-03-05 19:45:22

标签: javascript html angularjs arrays

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

// 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]。谢谢!

2 个答案:

答案 0 :(得分:0)

假设您有两个函数createObj()来创建对象,destroyObj()来销毁数组中的对象。

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

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

$watch函数

的角度为doc link

这是来自stackoverfllow的另一个有用的link,提供了一个如何使用它的简单示例。

答案 1 :(得分:0)

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

然后,在更改处理函数内部,只需要求当前值并使用数组splice()函数来增大或缩小数组。