【问题标题】:change an array length from an input box of type number从数字类型的输入框中更改数组长度
【发布时间】:2017-03-05 19:45:22
【问题描述】:

我有一个包含对象的数组。我想从数字类型的输入框中更改此数组中的对象数。因此,每次输入框中的数字增加时,我都会增加长度,减少相同。我还想根据数组的增加或减少来推送默认对象或弹出最后一个对象。这是我当前的代码。

// 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();
}

问题是我无法真正判断用户何时减少了数字,并且我不太确定如何检测值的增加或减少。如果我对 page.offense.topRow.length 使用 ng-model,我将得到一个在最后一个索引之后没有对象的数组,因为它会增加长度,然后推动对象在数组中留下一个间隙。数组看起来像这个数组 = [1, 3]。谢谢!

【问题讨论】:

    标签: javascript html angularjs arrays


    【解决方案1】:

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

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

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

    这里是 doc link 的角度 $watch 函数

    这里是另一个有用的 link 来自 stackoverfllow 给出了一个简单的例子来说明如何使用它。

    【讨论】:

    • 我喜欢使用 $watch 函数的想法,我一直试图让 watch 函数工作,但每次更改输入框时似乎都不会触发这是我的代码, $scope.$watch('topEntriesOffense', function(newValue, oldValue) { if ( newValue &gt; oldValue ) { topEntriesOffenseAdd(); } } );
    • 感谢所有帮助,我按照 Soviut 的建议使用了 ng-change,就在它发生变化时,我根据当前的值调用 creatObj() 和 destroyObj() 函数模型。我将旧值保存在范围变量中,当前值将通过调用 this.value 在函数中检索。我无法让手表正常工作。但是这种方式效果很好。谢谢大家的帮助!!
    • 很高兴为您提供帮助。但是我很好奇为什么 $watch 函数没有帮助。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多