【问题标题】:how to bind values to an object in order of insertion如何按插入顺序将值绑定到对象
【发布时间】:2016-11-28 16:08:11
【问题描述】:

我有一些输入,我想按插入顺序获取数据,例如:
如果我插入值bbb,那么值aa我想在aa之前得到bbb
我在网上搜索,发现使用Map确保此顺序,但我不知道如何使用它与ng-model
先感谢您。
编辑
我正在使用一个对象来存储 inputs 的值和一个自定义的 key 传递值
这是一个example,如果你在输入3然后2然后1中插入值,然后单击确定,在控制台中输出将按字母顺序排序

【问题讨论】:

    标签: javascript angularjs angular-ngmodel


    【解决方案1】:

    正如@czosel 所说,javascript 对象没有排序,通常按键的字母顺序排序。因此,您最好的解决方案可能是不按原样使用 ng-model 指令。

    您可以尝试以下两种可能性:

    解决方案 1

    在每个<input /> 中放置一个ng-blur 指令,该指令将确定输入的顺序。例如:

    HTML <input ng-blur="onBlur('model1')" ng-model="model1" /> <input ng-blur="onBlur('model2')" ng-model="model2" />

    controller.js

    app.module('myModule').controller('myCtrl', ['$scope', function($scope) {
      $scope.count = 0;
    
      $scope.onBlur = function(key){
        // check if anything was entered
        if($scope[key]){
    
          // make sure this is first time data was entered into this input
          if(!$scope[key].order)
            $scope[key].order = $scope.count++;
        }
      };
    }]);
    

    解决方案 2

    将值存储在数组中。与第一个解决方案类似,但不是保持计数,而是完全放弃 ng-model 并手动将值添加到数组中(在检查它不存在之后,数组有点棘手)。当然你也必须自己处理更新,所以第一种方法肯定会更简单。如果您出于某种原因决定选择这种方法,lodash 库可能会有很大帮助。

    祝你好运!

    【讨论】:

      【解决方案2】:

      JavaScript 对象属性没有保证顺序,请参阅this answer

      尝试使用数组。

      【讨论】:

      • 我已经看到了这个问题,但是考虑到我的键不是整数,我该如何使用数组
      【解决方案3】:

      您可以排队(先进先出)以插入顺序获取数据。触发一个函数,将绑定在 ng-model 中的值存入队列。

      例如:ng-model = data // 这里的数据是 bbb

      var queue = [];
      function bind(value){
      queue.push(value); // value will be bbb       
      }
      

      如果用户输入 aa 则需要再次调用绑定函数以将值推送到队列中 你可以按插入的顺序获取值。

      【讨论】:

        猜你喜欢
        • 2015-03-29
        • 1970-01-01
        • 2013-02-20
        • 2010-10-21
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        相关资源
        最近更新 更多