Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从number类型的输入框更改数组长度_Javascript_Html_Angularjs_Arrays - Fatal编程技术网

Javascript 从number类型的输入框更改数组长度

Javascript 从number类型的输入框更改数组长度,javascript,html,angularjs,arrays,Javascript,Html,Angularjs,Arrays,我有一个包含对象的数组。我想从number类型的输入框更改此数组中对象的数量。因此,每次输入框中的数字增加时,我都会增加长度,减少时也是如此。我还想推送一个默认对象或弹出最后一个对象,这取决于它在数组中的大小。这是我目前的代码 // html <input type="number" class="form-control" min="0" max="12" ng-click ="topEntriesSelectOffense()" ng-value="page.offense.topRo

我有一个包含对象的数组。我想从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();
}
//html
//我的控制器
$scope.topEntriesselectAnsware=函数(){
//如果数字增加,则按
$scope.page.offension.topRow.push({
"1": {
“名字”:“名字”,
“lastName”:“lastName”,
“头像”:“文件/路径”
},
"2": {
“名字”:“名字”,
“lastName”:“lastName”,
“头像”:“文件/路径”
},
"3": {
“名字”:“名字”,
“lastName”:“lastName”,
“头像”:“文件/路径”
},
“位置”:“位置”
});
//如果数量减少,则弹出
$scope.page.offension.topRow.pop();
}

问题是,我真的不知道用户何时减少了数字,我也不确定如何检测值的增加或减少。如果我对page.offence.topRow.length使用ng模型,我将得到一个数组,该数组在最后一个之后的索引中没有对象,因为它将增加长度,然后推动对象,在数组中留下一个间隙。该数组看起来像这样的数组=[1,3]。谢谢

假设您有两个函数,
createObj()
用于创建对象,
destroboj()
用于销毁数组中的对象

现在,您需要根据输入中的变量添加/减去对象

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

下面是
$watch
功能的角度


下面是StackOverflow提供的另一个有用的示例,以提供如何使用它的简单示例。

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


然后,在您的change handler函数中,只需请求当前值,然后使用array
splice()
函数来增大或缩小数组。

我喜欢使用$watch函数的想法我一直在尝试让watch函数工作,但似乎并不是每次更改输入框时都会触发它这里是我的代码,
$scope.$watch('topEntriesOffense',函数(newValue,oldValue){if(newValue>oldValue){topEntriesOffenseAdd();}}})感谢所有的帮助,我使用了Soviut建议的ng更改,当它更改时,我调用一个函数来创建obj()和销毁obj(),就像您建议的那样,这取决于模型的当前值。我将旧值保存在一个范围变量中,当前值将通过调用this.value在函数中检索。我无法使手表正常工作。但这种方法很有效。谢谢你的帮助!!很高兴能帮忙。然而,我很好奇为什么
$watch
功能没有帮助。