如何按插入顺序将值绑定到对象

时间:2016-11-28 16:08:12

标签: javascript angularjs angular-ngmodel

我有一些输入,我想按插入顺序获取数据,例如:
如果我插入值aa,那么我希望获得值bbb {{ 1}} befor aa
我在网上搜索并发现此订单是使用Map确保的,但我不知道如何将其与ng-model一起使用。
先感谢您。
修改
我正在使用一个存储输入值的对象和一个带有值的自定义 这是一个example,如果你在输入3然后2然后1插入值,然后点击确定,在控制台中输出将按字母顺序排序

3 个答案:

答案 0 :(得分:1)

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

尝试使用数组。

答案 1 :(得分: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 :(得分:0)

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

Ex:ng-model = data //这里的数据将是bbb

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

如果用户输入aa,则需要再次调用bind函数来推送队列中的值 U可以按插入顺序获取值。