我有一个只有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>
答案 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 = "";
};