Angular 1:向新创建的对象添加新ID

时间:2016-03-30 03:52:14

标签: javascript angularjs

我有一个只有1个输入字段的简单表单。对于每个输入,都会创建一个新对象。这是我添加新对象的方法。我正在寻找Angular方法来为这些对象添加ID,你会建议什么?

$scope.addToDoItem = function(){
  var toDoItems = $scope.toDoItems;
  var newToDoItem = {
    "id" : // id should be generated here
    "content" : $scope.toDoItem,
    "createdAt" : Date.now()
  }
  toDoItems.push(newToDoItem);
  ls.set("toDoData", toDoItems);
  $scope.toDoItem = "";
};

观点:

  <form>
    <input type="text" ng-model="toDoItem">
    <input type="submit" ng-click="addToDoItem()">
  </form>

2 个答案:

答案 0 :(得分:3)

我认为没有&#34;棱角分明的方式&#34;这样做。

但是,目前您使用createdAt值的毫秒数,因此您也可以使用相同的Id值。如果您没有应用程序可以更频繁地添加新值,那么您将拥有自己的独特价值:

var currentDate = Date.now();
var newToDoItem = {
    "id" : currentDate
    "content" : $scope.toDoItem,
    "createdAt" : currentDate
}

缺点是ID值很大,并且它们不会按顺序排列。如果您希望值为1,2,3等,则可以在控制器中为最大ID创建变量,并使用它来增加值:

var maxId = 0;
//if you need to restore maxId you can use
//var maxId = $scope.toDoItems.reduce(function(max,cur){return Math.max(max,cur.id); },0);
$scope.addToDoItem = function(){
  var toDoItems = $scope.toDoItems;
  maxId++;
  var newToDoItem = {
    "id" : maxId,
    "content" : $scope.toDoItem,
    "createdAt" : Date.now()
  }
  toDoItems.push(newToDoItem);
  ls.set("toDoData", toDoItems);
  $scope.toDoItem = "";
};

答案 1 :(得分:0)

如果你想要一个随机哈希,你也可以这样做

$scope.addToDoItem = function() {
var toDoItems = $scope.toDoItems;
var newToDoItem = {
    "id": function randString() {
        var x = 32; // hashlength
        var s = "";
        while (s.length < x && x > 0) {
            var r = Math.random();
            s += (r < 0.1 ? Math.floor(r * 100) : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65)));
        }
        return s;
    },
    "content": $scope.toDoItem,
    "createdAt": Date.now()
}
toDoItems.push(newToDoItem);
ls.set("toDoData", toDoItems);
$scope.toDoItem = "";
};