AngularJS 为数组中的对象创建 Id-s

AngularJS make Id-s for objects in an array

我是编程新手,遇到了一个非常令人沮丧的问题。我真的花了几个小时找到答案,但我失败了。

所以基本上我正在处理一个详细的 todo 列表。我的 todos 是数组中的对象。我现在应该为主从细节创建不同的视图,但我无法按 ID 分隔对象。

这是我的 AngularJS 代码:

myTodoList.controller("mainController", ['$scope', function($scope, $route, $routeParams, $location) {
    $scope.todos = [{
        'id': 0,
        'title': '',
        'done': false,
        'priority': '',
        'deadLine': '',
    }];

    $scope.$route = $route;
    $scope.$location = $location;
    $scope.$routeParams = $routeParams;
    $scope.params = $routeParams;
    $scope.todos = [];

    $scope.addTodo = function(title, priority, deadLine, id) {
        $scope.todos.push({
            'id': $scope.todos.id,
            'title': $scope.newTodo,
            'done': false,
            'priority': $scope.newPriority,
            'deadLine': $scope.newDeadLine
        });
        $scope.newTodo = ''
        $scope.newPriority = ''
        $scope.newDeadLine = ''
        $scope.todos.id++;
    }

在这种情况下,当我尝试通过 :id 创建路由时,它说它是 NAN(我猜不是数字)。但是如果我将代码更改为:

$scope.addTodo = function(title, priority, deadLine, id) {
        $scope.todos.push({
            'id': 0,
            'title': $scope.newTodo,
            'done': false,
            'priority': $scope.newPriority,
            'deadLine': $scope.newDeadLine
        });
        $scope.newTodo = ''
        $scope.newPriority = ''
        $scope.newDeadLine = ''
        $scope.todos.id++;
    }

这样,所以'id': 0,那么所有的待办事项都得到ID中的数字0。我已经3天没把这件事做对了。

$scope.todos是一个数组,所以'id': $scope.todos.id行不行。

更改为:

$scope.todos.push({
    'id': $scope.todos[0].id // <-- here
    'title': $scope.newTodo,
    'done': false,
    'priority': $scope.newPriority,
    'deadLine': $scope.newDeadLine
});

语法是使用数组的第一个元素。

不确定为什么要使用数组来保存最后一个 ID,但问题是您没有初始化 ID;

var id;
id++; //NAN

Javascript 非常 lose 如您所见,您可以向数组添加属性并对未定义的变量使用运算符而不会出现任何错误。在您的情况下,$scope.todos.id = 0; 在初始化数组后立即解决问题。

不过最好把最后一个id放在另一个变量里,而且不需要在范围内,只要var lastId = 0;lastId++就够了。